此问题在此处已有答案:
Sizeof struct in Go(6个答案)
Struct has different size if the field order is different(1个答案)
Why is the struct memory size inconsistent with my expectations?(2个答案)
上个月关门了。bool
类型的strict
属性显示2种不同的大小。代码段及其输出如下所示。
案例1:
package main
import (
"fmt"
"unsafe"
)
type Encoding struct {
encode [64]byte
decodeMap [256]byte
padChar rune
strict bool
}
func main() {
e := Encoding{}
fmt.Printf("%d", unsafe.Sizeof(e))
}
产量:328台
预期:输出应为325(64 + 256 + 4 + 1)字节
案例2:
package main
import (
"fmt"
"unsafe"
)
type Encoding struct {
// encode [64]byte
// decodeMap [256]byte
// padChar rune
strict bool
}
func main() {
e := Encoding{}
fmt.Printf("%d", unsafe.Sizeof(e))
}
输出:1个
1条答案
按热度按时间gfttwv5a1#
Sizeof(bool)为1。您的计算不正确。
结构体的大小是其组成字段的大小,通过字段对齐的填充进行调整。结构体将与其最严格的字段对齐方式对齐:rune(int32)或4个字节。因此,我们有:
然后,使用数组元素对齐的填充调整结构的大小,以保持不变
因此,对于4字节结构体对齐,向上舍入到最接近的4,我们有:
第一个
https://go.dev/play/p/CZT-5v41SfL