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的大小

读者可自行测试结构体内的字段组合.