28 lines
656 B
Markdown
28 lines
656 B
Markdown
|
# 关于 Go 结构体内存大小的一点小知识
|
||
|
|
||
|
在 go 语言里我们经常使用 struct 作为数据存储,由于指针对齐问题,可能结构体的大小也有所不同。
|
||
|
|
||
|
```go
|
||
|
type DemoOne struct {
|
||
|
id int8
|
||
|
age int32
|
||
|
add int8
|
||
|
}
|
||
|
type DemoTwo struct {
|
||
|
age int32
|
||
|
id int8
|
||
|
add int8
|
||
|
}
|
||
|
```
|
||
|
|
||
|
上述两个内容一致的结构体在占用的内存是多少呢?
|
||
|
|
||
|
```go
|
||
|
func main() {
|
||
|
fmt.Println(unsafe.Sizeof(DemoOne{}))//size为12
|
||
|
fmt.Println(unsafe.Sizeof(DemoTwo{}))//size为8
|
||
|
}
|
||
|
```
|
||
|
|
||
|
由于指针对齐的问题,相同属性的结构体,因为属性的顺序不同也会产生不同大小的内存占用。
|