Go内存对齐
来源:互联网 发布:网络推广维护 编辑:程序博客网 时间:2024/06/14 06:18
直接上例子
package mainimport ( "fmt" "reflect")type Data struct { b byte a int32 //x int16}func main() { var d Data t := reflect.TypeOf(d) fmt.Println(t.Size(),t.Align())}----------输出结果 : 8 4
假若结构体里面是b byte a int
,那么输出结果是16 8
原因是我的机器是64位机器,int默认8byte对齐.
另一个例子
package mainimport ( "fmt" "reflect")type Data struct { b byte a int32 x int64}type Data1 struct { b byte x int64 a int32}func main() { var d Data t := reflect.TypeOf(d) fmt.Println(t.Size(),t.Align()) var d1 Data t1 := reflect.TypeOf(d1) fmt.Println(t1.Size(),t1.Align()) //f ,_ := t.FieldByName("b") //fmt.Println(f.Type.FieldAlign())}----------输出结果:16 824 8
d 的内存结构: b---|aaaa|xxxx|xxxx----------d1的内存结构: b---|----|xxxx|xxxx|aaaa|----
上面例子能说明:
- 内存对齐影响struct的大小
- struct的字段顺序影响struct的大小
读者可自行测试结构体内的字段组合.
阅读全文
0 0