关于 unsafe.Sizeof 的问题

bitosky · · 2210 次点击
struct内存分配: https://go.wuhaolin.cn/gopl/ch13/ch13-01.html
#2
更多评论
楼主 “struct 对齐方式是 4 byte 为一个单位的”这个理解是错误的,不同类型对齐方式不同,MyStruct中,x(int8)对齐align是1,s(string)对齐align是8,go在分配x后(假设地址为0xc000004481),准备放s时,因为s对齐align是8,就不得不向0xc000004488这个地址分配了,可以用以下代码看偏移和变量地址: *** fmt.Printf("x align:%v offset:%v\n",unsafe.Alignof(tmp.x),unsafe.Offsetof(tmp.x)) *** fmt.Printf("s align:%v offset:%v\n",unsafe.Alignof(tmp.s),unsafe.Offsetof(tmp.s)) *** fmt.Printf("%p\n",&tmp.x) *** fmt.Printf("%p\n",&tmp.s) *** 输出: x align:1 offset:0 s align:8 offset:8 0xc000004480 0xc000004488
#1
谢谢,我明白了,这和 C 的 struct 对齐方式很像。 我之前是被人误导了,但是因为我用过C和C++,对此感到怀疑,于是自己做了个实验。
#3