在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
如何得到一个对象所占内存大小?fmt.Println(unsafe.Sizeof(int64(0))) // "8" type SizeOfA struct { A int } unsafe.Sizeof(SizeOfA{0}) // 8 type SizeOfC struct { A byte // 1字节 C int32 // 4字节 } unsafe.Sizeof(SizeOfC{0, 0}) // 8 unsafe.Alignof(SizeOfC{0, 0}) // 4 结构体中A byte占1字节,C int32占4字节. SizeOfC占8字节 内存对齐:
type SizeOfD struct { A byte B [3]int32 } unsafe.Sizeof(SizeOfD{}) // 16 unsafe.Alignof(SizeOfD{}) // 4
type SizeOfE struct { A byte // 1 B int64 // 8 C byte // 1 } unsafe.Sizeof(SizeOfE{}) // 24 unsafe.Alignof(SizeOfE{}) // 8
type SizeOfF struct { A byte // 1 C byte // 1 B int64 // 8 } unsafe.Sizeof(SizeOfF{}) // 16 unsafe.Alignof(SizeOfF{}) // 8
下面我们来看一下结构体中元素的内存布局:unsafe.Offsetof:返回结构体中元素所在内存的偏移量 type SizeOfH struct { A byte C int16 B int64 D int32 } unsafe.Offsetof(SizeOfH{}.A) // 0 unsafe.Offsetof(SizeOfH{}.C) // 2 unsafe.Offsetof(SizeOfH{}.B) // 8 unsafe.Offsetof(SizeOfH{}.D) // 16 下图为SizeOfH 内存布局图: 蓝色区域是元素实际所占内存,灰色为内存空洞。 下面总结一下go语言中各种类型所占内存大小(x64环境下):X64下1机器字节=8字节 总结一下:
|
请发表评论