关于 unsafe.Sizeof 的问题

bitosky · · 2208 次点击
按照顺序 进行内存对齐. 这个站点资料 挺好的~
#4
更多评论
楼主 “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
struct内存分配: https://go.wuhaolin.cn/gopl/ch13/ch13-01.html
#2