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


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字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM