https://www.golangtc.com/t/5ad833404ce40d2654053485

小生初学Go,有一点不懂,今天为了知道空结构体到底占多大的空间的时候,去百度说用unsafe.sizeof,但是对于unsafe.sizeof好像和其它语言的sizeof有些不一样?

比如:

var str string = "hello"
var str2 string fmt.Println(unsafe.SizeOf(str), unsafe.SizeOf(str2))

结构两个打印出来都是16,这是为啥?
到底怎样来获取结构体占的空间大小?
空结构体占多大的空间?

共 1 个回复


golang中,unsafe.sizeof到底是干嘛的?-LMLPHP

heimeil 2018-04-19 19:56

只返回数据类型的大小,不管引用数据的大小,string类型不是直接存的数据,而是一个结构体,用指针指向实际数据地址

type StringHeader struct {
Data uintptr
Len int
}

在64位系统上uintptr int都是8字节,加起来就16了。

https://golang.org/pkg/reflect/#StringHeader

初步解释:因为Golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度,两部分各是8字节,所以一共16字节

05-11 18:08