我正在开发一个32位应用程序,出现内存不足错误。
我注意到我的Visual Studio和一个插件(其他应用程序也是)使用了太多的内存,大约是4或5 GB。
所以我怀疑这些程序用完了我的程序能够找到空闲内存的所有内存地址。
我想32位只能使用前4GB,其他内存根本无法使用。
我不知道这一点是否正确,否则我会寻找其他答案,就像我的代码中有错误一样。
的声明
我想32位只能使用前4GB,其他时间它根本不能用。
绝对是不正确的。在64位操作系统中,由于虚拟到物理内存的转换表是64位的,所有应用程序都可以使用所有内存,而不管它是什么位。
一些非常古老的硬件可能不允许DMA访问4GB以上的地址,但我真的希望现在大部分都在垃圾场里。
如果系统作为一个整体运行时内存不足,则会或多或少地影响所有应用程序。
然而,默认情况下,32位应用程序只能使用虚拟地址范围的较低2GB(尽管这些2GB可以放置在物理内存中的任何位置,如上所述,通过64位转换表)。通过在链接命令中使用/LARGEADDRESSAWARE
,您可以将其扩展到近4GB(在32位操作系统中为3GB,在这种情况下受/3GB引导标志的限制)-这只是"告诉"操作系统,您的应用程序将"理解"地址可能是负的,因此将在2GB以上的地址下正常运行。
任何系统都可能因负载过重而停机。
但在Windows和任何其他虚拟内存操作系统中的正常使用中,其他程序的内存消耗不会对任何给定程序的执行产生太大影响。
内存不足错误是不常见的,但如果进行了大量分配或声明了一个大型本地自动变量,就会发生这种错误。如果未能正确释放不再使用的内存,也可能发生这种情况,即程序正在泄漏内存。对于64位机器上的32位程序,耗尽的不是内存本身,而是程序中的可用地址空间。