13、Go 语言类型深度解析

Go 语言类型深度解析

1. 结构体字段对齐

在 Java 中,我们无法确切知晓类字段在内存中的布局顺序,因为即时编译器(JIT)可以选择任意顺序。而在 Go 语言里,结构体通常按照字段声明的顺序在内存中布局。每种类型都有其自身的对齐需求,一般基于该类型占用的字节数,会对齐到 16 字节边界。

为了优化内存使用,最好将较大的字段放在前面,否则结构体内部可能会出现间隙以重新建立对齐。我们可以使用特定大小的空白字段(名称为 “_”)来强制对齐。例如:

type Xxx struct {
    i1 int64
    b  int8
    _  [3]byte  // add 3 bytes
    i2 int16
    _  [2]byte  // add 2 bytes
    i3 int32
}

结构体字段的对齐情况如下表所示:
| 类型 | 大小(字节) |
| — | — |
| byte, uint8, int8, bool | 1 |
| uint16, int16 | 2 |
| uint32, int32, float32, rune | 4 |
| uint64, int64, float64, complex64 | 8 |
| complex128 | 16 |
| int, uint | 4 或 8(取决于机器架构) |
| * | 4 或 8(取决于机器架构) |

大多数现代计算机使用 64 位(8 字节)字,因此 int、uint 和指针的长度通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值