【发布时间】:2012-02-12 14:40:05
【问题描述】:
在 C++ 中,当我执行 new(甚至是 malloc)时,是否可以保证返回地址会大于某个值?因为......在这个项目中,我发现使用 0-1k 作为枚举非常有用。但如果有可能获得如此低的价值,我不想这样做。我唯一的目标系统是带有 OS window/linux 和 mac 的 32 位或 64 位 CPU。
标准对指针有什么规定吗? windows 或 linux 是否说明了它们的 C 运行时以及最低内存地址(对于 ram)是什么?
-edit- 我最终修改了我的new 重载以检查地址是否高于>1k。如果没有,我会调用 std::terminate 。
【问题讨论】:
-
为什么使用枚举作为指针?
-
@Pubby:通常(特别是在解释器和游戏中)依靠特定于平台的指针特性来填充额外的信息,通常是为了消除间接性。由于对齐规则,低三位是空闲的;此外,64 位系统通常具有只有 48 位有效位的用户空间指针;其余的都是
1或0,因此您可以将指针打包到double的(53 位)尾数中,并将其高位设置为表示NaN。然后,低阶标志让您可以在带有掩码和移位的表示之间快速选择。 -
看来我只需要 6 位所以我什至不需要前 1 或 4k :)。
标签: c++ memory pointers new-operator ram