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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值