2015-01-04 63 views
1

我想确保当内存分配地址进入> 4GB内存范围时,我的32位移植代码能够正常工作。如何验证64位兼容性?

在我的主要方法开始分配4GB是一个好主意吗?

将基地址设置在32位范围之外更好吗? 是否需要在每个动态链接库中设置基地址?

没有必要提及我已经查看过静态代码分析器结果并查看了我的代码。

+0

你为什么认为这可能无效?你用指针做一些有趣的事情吗?以某种方式直接操纵地址位? – Ferruccio 2015-01-04 12:49:33

+0

* Portable * code“远远优于”移植“代码(尽管前者对Windoze来说总是一个挑战),寻址超过4GB的内存只是代码的64位兼容性的一小部分, Ex:假定八位字节的大小大于char类型,并且不保证CRT可能已经*提供了使用ptr的高32位的地址所以这种安慰是虚假的,而且'/ LARGEADDRESSAWARE:NO'也不是没有银弹。简而言之,没有一些工作就没有简单的解决方案。 – WhozCraig 2015-01-04 12:58:38

+0

我研究了这些[移植问题的例子](http:// www .viva64.com/en/a/0004 /),我想确保在我们的应用程序中没有发生第6个问题。这两个想法测试这个问题在我的文章中提到。Setting/BASE or [/修复](http://msdn.microsoft.com/zh-cn/library/w368ysh2.aspx)或在应用程序上分配足够的内存启动。但我不知道哪个方式更好... – Darko 2015-01-04 13:31:07

回答

3

使用某种方式来强调测试程序的这个方面的最简单方法之一是使用自上而下的内存分配。可以通过如下所述的注册表设置启用系统范围:http://msdn.microsoft.com/en-us/library/bb190527.aspx

您的程序可以使用此设置正确运行,但不会证明它是正确的。自上而下的内存分配只是清除一些最典型的32/64位错误的一种方式。

+0

好主意,谢谢!你怎么看待/ BASE或/ FIXED的想法? – Darko 2015-01-04 13:40:39

+0

我不确定你可以强制加载地址高于4GB。值得一试虽然。 – 2015-01-04 14:00:50

相关问题