运行 32 位程序,占用 64 位内存

运行 32 位程序,占用 64 位内存

我想以足够的内存来运行一个旧的 32 位游戏,就好像它是一个 64 位游戏一样。

我想这样做是因为原来的设计很差,有时会耗尽内存并崩溃。所以我想用更大的内存分配来运行它,也就是说,就像它是 64 位一样。

有没有办法做到这一点?

答案1

32 位程序最多可以使用 2^32 大小的地址空间,也就是 4GB。而 64 位程序最多可以使用 2^64 大小的地址空间,也就是 16 ExiBytes。因此,64 位程序可以更好地利用可用内存和 CPU。

32 位应用程序仍然可以使用 4 GB 中的 2 GB,其余部分由系统保留,但在 64 位系统中,您可以使用名为 4GB 补丁让 32 位应用程序使用剩余的 2 GB。或者,如果有 64 位版本的游戏,请下载。

仍然没有办法将 32 位应用程序的内存使用量提高到 4GB 以上。

答案2

短的:使用 64 位内存是不够的。软件必须编码为 64 位应用程序才能使用 64 位内存,但事实并非如此。

更详细的解释:这是由于“寻址限制”造成的。简单地说,它不知道如何访问 32 位以上的内存,这意味着它理论上最多只能使用 4GB(2^32)的 RAM(64 位理论上最多可以使用 2^64 GB 的 RAM)。这一切都非常普遍和简单,但并非绝对真理。例如,内存重新映射等解决方案允许 32 位 Windows 使用超过 4GB 的内存。但它们必须实现到软件中,就像 64 位必须在软件中实现一样。

结论:因此,除非您更改源代码,否则您无法从“外部”做任何事情。编辑:我的错,显然你可以做一点: Wasif 在他的答案中提供了一种可能的解决方法,可以访问总共 4GB 而不是 2GB 的完整 32 位地址范围(这里有一个详尽的文章对此)。但是,它仍然不会“像是一个 64 位”应用程序。(而且它也不一定能解决 OP 的崩溃问题,因为通过操作系统提供的虚拟内存,应用程序可以使用超过 2GB 的内存)。

笔记:请参阅 Wasif 的回答,以获得更深入的解释和访问超过标准 2GB 内存的方法,以利用 32 位应用程序的全部地址范围。

相关内容