c++ - 如果其他程序在 64 位 Windows 中使用过多,32 位程序是否会内存不足?

标签 c++ c memory 32bit-64bit

我正在开发一个 32 位应用程序并遇到内存不足错误。

我注意到我的 Visual Studio 和一个插件(还有其他应用程序)使用了太多内存,大约 4 或 5 GB。

所以我怀疑这些程序用完了我的程序能够找到空闲内存的所有内存地址。

我想32位只能使用前4 GB,其他内 stub 本不能使用。

我不知道我的看法是否正确,否则我会寻找其他答案,就像我的代码中有错误一样。

最佳答案

你的陈述

I suppose that 32bit can only use the first 4 giga byte, othere momery it can not use at all.

绝对不正确。在 64 位操作系统中,所有应用程序都可以使用所有内存,而不管它的位数是多少,这要归功于虚拟内存到物理内存的转换表是 64 位的。

一些非常古老的硬件可能不允许 DMA 处理超过 4GB 的地址,但我真的希望现在大部分都在垃圾场。

如果整个系统内存不足,它将或多或少地影响所有应用程序。

但是,默认情况下,32 位应用程序只能使用较低的 2GB 虚拟地址范围(尽管这 2GB 可以放在物理内存中的任何位置,如上文所述,借助 64 位转换表).您可以通过在链接命令中使用 /LARGEADDRESSAWARE 将其扩展到近 4GB(在 32 位操作系统中为 3GB,并且在这种情况下受/3GB 引导标志的约束) - 这只是告诉操作系统您的应用程序将“理解”地址可以为负,因此可以在超过 2GB 的地址下正常运行。

关于c++ - 如果其他程序在 64 位 Windows 中使用过多,32 位程序是否会内存不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864105/

相关文章:

c++ - 取消挂起的接收?

c++ - 段错误进程 ID 和核心转储进程 ID 不同。为什么?

c++ - 具有类型名称的矩阵总和

c - 为 C 寻找一个好的 GUI 库

c++ - TCPdump 在接收数据包时是否去除任何 header ?

c++ - 如何将数据传递给正在运行的线程

html - 如果打开的选项卡过多,Chrome HTML5 视频将停止工作 - 内存问题?

c++ - cygwin 不包含 mysql.h .. 我怎样才能在 cygwin 中得到它?

android - Android 中加载、回收和消除位图以提高内存效率

java - 如何确定 Java 中的 Activity 内存使用情况