1.2 KiB
1.2 KiB
Id 机制分析
作用定位
Engine/Common/Id.h 是整个运行时句柄系统的基础。
核心目标是用一个 u32 同时表达:
- 资源在数组中的索引;
- 该索引的生命周期代数(generation)。
位布局
id_type = u32- 高位:generation(
generation_bits = 8) - 低位:index(
index_bit = 24)
对应关键常量与工具:
index_mask:提取低位索引generation_mask:提取高位代数invalid_id:无效句柄哨兵值
核心函数语义
is_valid(id):判断是否不是无效值index(id):提取索引位generation(id):提取代数位new_generation(id):索引不变,代数递增
运行时价值
它主要解决“删除后旧句柄仍被外部持有”的问题:
- 对象删除后,槽位可复用;
- 复用时代数 +1;
- 旧句柄的 generation 与当前 generation 不一致;
- 存活校验失败,避免误访问新对象。
强类型策略
DEFINE_TYPED_ID(name):
- Debug:生成包装类型,增强类型隔离;
- Release:退化为
id::id_type,零额外开销。
这是“开发期安全 + 发布期性能”的组合设计。