为什么我无法在 64 位 Windows 上使用超过 4 GB 的内存运行我的程序?

为什么我无法在 64 位 Windows 上使用超过 4 GB 的内存运行我的程序?

我正在用 32 位 Delphi 创建程序。我的计算机运行 64 位 Windows 7,内存为 8 GB。

当我的 32 位程序在 Windows 7 中需要超过 3.8-4 GB 内存时,它会显示“内存不足”。

这是我的程序的错误还是 Windows 的错误?

答案1

如果您的程序是作为 32 位应用程序编写的,则它只能使用 32 位 Windows 子系统,该子系统仍存在于所有 64 位 Windows 版本中。要使用超过 4GB(或 3GB)的内存,您需要重新编译程序并针对 64 位平台。

答案2

您的应用程序仍然是 32 位应用程序,因此它最多只能寻址 2 32 =4GB 的内存。如果您没有进行任何配置,您的应用程序可用的内存量很可能只有 2GB。您是否考虑过重写您的应用程序,以便它不需要使用那么多内存?

答案3

32 位程序使用 32 位地址,因此它们无法寻址超过 4GB 的内存(除非你使用异戊烯醇,这可以增加您可以访问的内存范围,但仍然限制为 4GB一次

但是默认情况下你只能使用2GB RAM在 32 位应用程序中,因为较高的 2GB 是为内核保留的。您可以将限制增加到3GB(64 位 Windows 中为 4GB)通过将程序链接到/LARGEADDRESSAWARE选项和使用/3GB标志启动。如果你发现你的程序确实消耗了近 4GB 的 RAM,那么该标志已经启用,你不能超出这个限制

你使用的算法也可能不够高效。根据问题的不同,可能有不同的解决方案,例如稀疏数组、动态规划,或者分成小部分,每次只做一部分……没有代码就无法回答。如果可能的话,你应该问堆栈溢出或者代码审查

不管怎样,问题出在你的项目源代码或项目设置上,而使用 64 位是一个更好的解决方案。只需将你的程序重新编译为 64 位即可

相关内容