uintptr 与指针边界
uintptr
概念
uintptr: 可保存指针位模式的整数类型;- GC 语义:
uintptr不被垃圾回收器当作指针追踪; - 使用限制: 普通业务代码不应把
uintptr当作安全指针使用;
指针限制
概念
- 指针算术: Go 不支持普通指针加减运算;
- 临时值取址: 不可对不可寻址的临时结果直接取地址;
- 安全边界: 需要底层地址运算时通常涉及
unsafe;
边界对比
| 形式 | GC 是否按指针追踪 | 是否支持普通指针算术 |
|---|---|---|
| Go pointer | 是 | 否 |
uintptr | 否 | 作为整数参与运算 |
使用原则
- 普通代码: 使用类型安全的 Go pointer;
- 地址整数: 仅在明确需要底层地址表示时使用
uintptr; - 底层运算: 视为
unsafe相关边界;