用于Windows 32位mfc应用程序的虚拟内存中的地址。

时间:2017-02-07 15:34:11

标签: c++ windows mfc 32-bit virtual-memory

我有一个非常大的MFC应用程序只用于使用Visual Studio构建的32位生产版本。

我的应用程序中有一些特殊的类,它有int索引成员。该索引始终等于内存中该对象的地址。一切正常。

但是现在我需要确定我的应用程序的虚拟内存中的一些空间,肯定不包含该类的对象。 当我在调试器中看到它们时,间隔值通常不是很低或非常高,但它们是一些值。我可以安全地假设地址0-10k(0x0000-0x2710)将不包含该特定类的那些对象吗?如果没有,那么其他地址空间是否“安全”?

或者,如果没有这样的事情,也许我可以自己分配一些内存来设置虚拟“池”,我可以确定不会创建其他对象吗?

1 个答案:

答案 0 :(得分:2)

这是所有可怕的系统特定,但只要你能忍受这种限制......

    如果您只需要一个项目,
  • 0将起作用。
  • Windows保证不将任何对象放在第一个64K内存中,因此任何小于65536的值都是好的。 (Raymond Chen评论后补充)。
  • 如果您的代码未使用“大地址空间感知”进行编译,则可以使用0x80000000之后的任何地址。 (不幸的是,如果,虽然在32位平台上保留了1G,但在64位平台上,您的程序没有保留的地址空间。)
  • 如果您的数据具有对齐要求(如果它包含32位索引,那么它几乎肯定会对齐至少4个字节),那么任何未对齐的值都将起作用。特别是,任何奇数值都可以。 (再次,在Raymond Chen的评论之后补充)。