佛门广大,岂不容一癫僧!

Size

byte,uint8,in8 1
uint16,int16 2
uint32,int32,float32 4
uint64,int64,float64,complex64 8

结构体对齐:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
type T1 struct {
    a [2]int8
    b int64
    c int16
}
type T2 struct {
    a [2]int8
    c int16
    b int64
}

T1:{2,8,2} =24字节

T2:{2,2,8} = 16字节

结构体中的零在末尾也要对齐

零大小的字段:struct{}

一般来所零大小的字段不应该被统计,但是当这个字段在末尾时,如果有指针指向这个最后的字段。

返回的地址在结构体之外,如果指针一直存货不释放对应内存的话,会有内存泄漏的问题(该内存不因结构体释放而释放)。所以对末尾的零字段也做了填充。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
type T1 struct {
    a struct{}
    x int64
}
8
type T2 struct {
    x int64
    a struct{}
}
16