【发布时间】:2019-09-18 03:44:05
【问题描述】:
在下面的代码中:
c := "fool"
d := []byte("fool")
fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c)) // 16 bytes
fmt.Printf("d: %T, %d\n", d, unsafe.Sizeof(d)) // 24 bytes
要确定从 CloudFoundry 接收 JSON 数据所需的数据类型,我正在测试上面的示例代码以了解 []byte 与 string 类型的内存分配。
string 类型变量 c 的预期大小为 1 字节 x 4 ascii 编码字母 = 4 字节,但大小显示为 16 字节。
对于byte 类型变量d,GO 将字符串作为字符串文字嵌入到可执行程序中。它在运行时使用runtime.stringtoslicebyte 函数将字符串文字转换为字节切片。有点像...[]byte{102, 111, 111, 108}
byte 类型变量 d 的预期大小再次为 1 字节 x 4 ascii 值 = 4 字节,但变量 d 的大小显示为 24 字节,因为它是底层数组容量。
为什么两个变量的大小都不是4字节?
【问题讨论】: