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

在x64 Windows程序中选择堆栈的虚拟地址,windows,stack,64-bit,Windows,Stack,64 Bit,我正在开发一个迄今为止为32位的Windows程序代码库。我正在努力使这个代码库64位干净。通过设置“AllocationPreference”注册表值在堆管理器中打开“自上而下”分配对于查找错误非常有帮助,因为代码将指针强制降为32位值(例如int)并返回,从而丢失x64上指针值的最重要的一半。为了获得类似的调试好处,我想强制我的进程堆栈的虚拟地址远高于2**32。在WindowsVista x64上有没有办法做到这一点?对于它的价值,我使用VisualStudio 2008来构建这个代码库。

我正在开发一个迄今为止为32位的Windows程序代码库。我正在努力使这个代码库64位干净。通过设置“AllocationPreference”注册表值在堆管理器中打开“自上而下”分配对于查找错误非常有帮助,因为代码将指针强制降为32位值(例如int)并返回,从而丢失x64上指针值的最重要的一半。为了获得类似的调试好处,我想强制我的进程堆栈的虚拟地址远高于2**32。在WindowsVista x64上有没有办法做到这一点?对于它的价值,我使用VisualStudio 2008来构建这个代码库。

< P>我不确定Windows X64的情况,但是我非常确信,对于任何64位应用程序,堆栈指针已经开始在一个非常大的64位地址,应用程序代码在一个低地址和堆中间的某个地方。这或多或少是进程内存的“传统”布局。我知道在我的MacBook上,我得到的堆栈指针地址远远超过了32位的限制。我建议您编写一个小的测试应用程序来打印堆栈分配变量的地址,这样可以为堆栈在虚拟内存中的位置提供一个合适的参考点。

如何打开“自顶向下的堆管理器”?为什么不启用警告并在编译时修复它们?