【发布时间】:2017-02-07 15:34:10
【问题描述】:
我有相当大的 Windows MFC 应用程序,我使用 Visual Studio 作为 32 位生产发布版本构建。
我的应用程序中有一些特殊的类具有 int 索引成员。该索引始终等于该对象在内存中的地址。一切正常。
但是现在我需要确定我的应用程序的虚拟内存中肯定不包含该类的对象的一些空间。 当我在调试器中看到它们时,间隔值通常不是非常低或非常高,但它们在某个值附近。我可以安全地假设地址 0-10k (0x0000-0x2710) 将不包含该特定类的那些对象吗?如果没有,还有其他一些“安全”的地址空间吗?
或者如果没有这样的事情,也许我可以自己分配一些内存来拥有虚拟“池”,我可以确定不会创建其他对象?
【问题讨论】:
-
创建单独的堆,为这个类覆盖
operator new并从这个堆中分配这个对象 -
您可以使用
VirtualAlloc(MEM_RESERVE)分配一些地址空间。除非您将其放在那里,否则该地址空间中没有任何内容。备选方案:Windows 不会将任何对象放入内存的底部 64KB(0x0000 到 0xFFFF)。在 Windows 8 之前,应用程序可以使用技巧来手动将对象放置在那里,但从 Windows 8 开始,这也是不允许的。 -
您正在询问您提出的解决方案。但你真正想解决什么问题?
标签: c++ windows mfc 32-bit virtual-memory