1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// 示例[5]string 字符串数组内存布局
// 字符串结构我们是如下 64位操作系统下
// string struct
// 字段 类型 大小 示例
// data uintptr 8byte 指向底层数组 如x[0] -> ['h', 'e', 'l', 'l', 'o', '2', '1']
// len int 8byte 记录字符的长度 如x[0] 7
//
// |
// 0 1 ... 6 7 8 9 ... 14 15 16 17 .. 22 23 24 25 ... 30 31 32 33 .. 39 40 41 42 ... 内存地址byte
// | | | | | | | | | | ...
// |x[0].data| | x[0].len | | x[1].data | | x[1].len | | x2[2].data | ...
// | 8B | | 8B | | 8B | | 8B | | 8B | ...
//
// 数组的长度记录在数组的类型元数据中
x := [5]string{"hello21", "word", "! 1", "! 2", "! 3"}
// 数组x占用内存大小(字节) 5*16
fmt.Println(unsafe.Sizeof(x)) // 80
|