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 個回復
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字節