← 返回 Go Runtime Lab 首页

1. 动态 Slice 内存模型交互 React Live Simulator

type slice struct {
array unsafe.Pointer
8 Bytes | 指向底层数组起始指针
0xC000018000
len int
8 Bytes | 切片当前长度 (Length)
3
cap int
8 Bytes | 切片当前容量 (Capacity)
5
} // 总计 24 Bytes (64位架构)
底层数组内存块视角 (Underlying Array)Array ID: #1 (5 元素容量块)
10[0]+0B
20[1]+8B
30[2]+16B
0[3]+24B
0[4]+32B
nil[5]+40B
Length 范围 (len = 3)
Capacity 范围 (cap = 5)
未包含/未分配内存
实验室初始化成功: make([]int, 3, 5)

2. 扩容算法 (growslice) 计算器 Go 1.18+ 新规则

推导过程解析:
1
预估容量计算 (步骤 1)
原容量 oldCap (10) < 阈值 256,进行双倍扩容:newCap = 2 * oldCap = 20
2
内存规格向上对齐 (步骤 2)
预估需求: 20 × 8B = 160 字节。Go 内存分配器 RoundUp 内存规格至 160 字节
3
计算最终实际 Cap (步骤 3)
最终实际 Capacity = 160 字节 / 8B = 20
结论
原 cap 10 扩容至最终 cap 20 (实际分配内存 160 Bytes)