【发布时间】:2016-12-28 01:26:51
【问题描述】:
与我在 C++ 中学到的类似,我相信填充会导致两个结构的实例大小不同。
type Foo struct {
w byte //1 byte
x byte //1 byte
y uint64 //8 bytes
}
type Bar struct {
x byte //1 byte
y uint64 //8 bytes
w byte// 1 byte
}
func main() {
fmt.Println(runtime.GOARCH)
newFoo := new(Foo)
fmt.Println(unsafe.Sizeof(*newFoo))
newBar := new(Bar)
fmt.Println(unsafe.Sizeof(*newBar))
}
输出:
amd64
16
24
- 在定义结构成员时是否有经验法则可以遵循? (如类型大小的升序/降序)
- 是否有我们可以通过的编译时优化,可以自动解决这个问题?
- 或者我根本不应该担心这个?
【问题讨论】:
-
我做了一个例子,可以提供一些见解play.golang.org/p/dNWspo2Dxv
标签: go struct padding memory-alignment