跳到主要内容

uintptr 与指针边界

uintptr

概念

  • uintptr: 可保存指针位模式的整数类型;
  • GC 语义: uintptr 不被垃圾回收器当作指针追踪;
  • 使用限制: 普通业务代码不应把 uintptr 当作安全指针使用;

指针限制

概念

  • 指针算术: Go 不支持普通指针加减运算;
  • 临时值取址: 不可对不可寻址的临时结果直接取地址;
  • 安全边界: 需要底层地址运算时通常涉及 unsafe;

边界对比

形式GC 是否按指针追踪是否支持普通指针算术
Go pointer
uintptr作为整数参与运算

使用原则

  • 普通代码: 使用类型安全的 Go pointer;
  • 地址整数: 仅在明确需要底层地址表示时使用 uintptr;
  • 底层运算: 视为 unsafe 相关边界;