考虑 STL 的unordered_map
. 相同的模板类用于在运行时生成的哈希表和由编译时常量值组成的哈希表。虽然最近版本的 C++ 添加constexpr
了支持,但它并没有扩展到涉及自由存储的更复杂的操作,因此从编译时常量构建哈希表仍然必须在运行时进行,这使得它与在运行时构建任何其他哈希表一样昂贵。
理想情况下,一个完美的编译器会看到这一点并在编译时预先评估哈希表结构并将其直接嵌入程序中。
unordered_map
这让我想到了逆向计算和微控制器,考虑到汇编的开发成本,可以想象它们的软件可以用 C 或 C++ 编写:这些环境通常具有有限的 RAM,但有大量的 ROM,而那些内存中的数据结构(例如可以在编译时预先生成并保存到 ROM 中。
如前所述,C++ 语言不支持这种非平凡的constexpr
. 我知道您可以将其组合在一起,假设您可以将复杂的数据结构基于数组类型或将其简化为constexpr
- 或将其全部写入汇编并在十六进制编辑器中手动设置结构的每个字节并希望它匹配编译器对您的struct
类型的表示(例如)。
那今天怎么做呢?在 RAM 和 CPU 周期非常宝贵的 16 位和 32 位游戏机时代,它是如何做到的?我特别热衷于了解基于 ROM 卡带的游戏,其中的结构可以作为原始内存立即访问。