# 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. 对象删除后，槽位可复用；
2. 复用时代数 +1；
3. 旧句柄的 generation 与当前 generation 不一致；
4. 存活校验失败，避免误访问新对象。

## 强类型策略

`DEFINE_TYPED_ID(name)`：

- Debug：生成包装类型，增强类型隔离；
- Release：退化为 `id::id_type`，零额外开销。

这是“开发期安全 + 发布期性能”的组合设计。
