64位上Delphi 5的内存错误

64位上Delphi 5的内存错误,delphi,Delphi,我用Delphi 5编写了一个程序,该程序在我的Windows 8 32位pc上运行正常。我发现在我的Windows 7 64位笔记本上运行它最终会导致一个reallocmem错误,而这在32位pc上不会发生。我插入了以下内容 MS.dwLength := SizeOf(MemoryStatus); GlobalMemoryStatus(MS); 在32位pc上,尺寸永远不会改变,但在64位笔记本电脑上,尺寸会波动,但随着时间的推移会变小。在64位机器上运行32位Delphi 5是否有某种通用

我用Delphi 5编写了一个程序,该程序在我的Windows 8 32位pc上运行正常。我发现在我的Windows 7 64位笔记本上运行它最终会导致一个reallocmem错误,而这在32位pc上不会发生。我插入了以下内容

MS.dwLength := SizeOf(MemoryStatus);
GlobalMemoryStatus(MS);
在32位pc上,尺寸永远不会改变,但在64位笔记本电脑上,尺寸会波动,但随着时间的推移会变小。在64位机器上运行32位Delphi 5是否有某种通用机制使其成为可能

在64位机器上运行32位Delphi 5是否有某种通用机制使其成为可能

如果通过在生成后修改PE标志将应用程序标记为
LargeAddressware
,则可能会遇到问题,因为Borland内存管理器与address>2GB不兼容


如果您的应用程序不是
LargeAddressware
,那么它在64位机器上失败的原因并不明显,但在32位机器上失败的原因并不明显。在这种情况下,最合理的解释就是你的代码有一个需要调试的缺陷。

没有标记为LargeAddressware。我最初的行动是检查是否有任何未缠绕的物体——尽可能手动,然后使用“眼球”。这听起来像是在说“如果代码以64位运行,它就有缺陷,但如果代码以32位运行,它就没有缺陷”。我猜代码总是有缺陷的。它只是碰巧出现在一台机器上,而不是另一台机器上。主要的一点是,我认为你正在寻找一个银弹解决方案。在64位上配置***,问题就解决了。但这不太可能。我的猜测是,您需要查看代码内部而不是外部。谢谢,您的分析可能是正确的,因此下一步是返回查看我的代码。从:在内存超过4 GB的计算机上,GlobalMemoryStatus函数可能返回不正确的信息,报告值为–1表示溢出。因此,应用程序应改用GlobalMemoryStatusEx函数。