在x64 Windows程序中选择堆栈的虚拟地址

时间:2009-07-28 19:16:36

标签: windows stack 64-bit

我正在研究迄今为止32位的Windows程序代码库。我试图使这个代码库64位干净。通过设置“AllocationPreference”注册表值来打开堆管理器中的“自上而下”分配,这对于解决代码无法将指针强制转换为32位值(例如int)和返回的错误非常有帮助,从而失去了x64上指针值的最重要的一半。为了获得类似的调试好处,我想强制我的进程堆栈的虚拟地址远高于2 ** 32。在Windows Vista x64上有什么办法吗?对于它的价值,我使用Visual Studio 2008来构建这个代码库。

1 个答案:

答案 0 :(得分:0)

我不确定Windows x64的情况,但我很确定使用任何64位应用程序时,堆栈指针已经从一个非常大的64位地址开始,应用程序代码很低地址和堆中间的堆。这或多或少是过程记忆的“传统”布局。我知道在我的MacBook上,我得到的堆栈指针地址远远高于32位的限制。我建议您编写一个小型测试应用程序来打印出堆栈分配变量的地址,这应该为您提供堆栈位于虚拟内存中的合适参考点。