Is it true that 32Bit program will be out of memory, if other programs use too much, in 64bit windows?

走远了吗. 提交于 2020-01-06 03:36:25

问题


I am developing a 32 bit application and got out of memory error.

And I noticed that my Visual Studio and a plugin (other apps too) used too much memory which is around 4 or 5 GB.

So I suspected that these program use up all the memory addresses where my program is able to find free memory.

I suppose that 32 bit can only use the first 4 GB, other memory it can not use at all.

I don't know if I am correct with this, other wise I will look for other answers, like I have bug in my code.


回答1:


Your statement of

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

is definitely incorrect. In a 64-bit OS, all applications can use all of the memory, regardless of what bitness it is, thanks to the translation table for virtual to physical memory being 64-bit.

Some really ancient hardware may not allow DMA to addresses above 4GB, but I really hope most of that is in the junk-yard by now.

If the system as a whole is running low on memory, it will affect all applications more or less equally.

However, a 32-bit application can only, by default, use the lower 2GB of the virtual address range (although these 2GB can be placed anywhere in the physical memory, as described above by means of a 64-bit translation table). You can extend this to nearly 4GB (3GB in a 32-bit OS, and subject to the /3GB boot flag in this case) by using /LARGEADDRESSAWARE in your linking command - this simply tells the OS that your application will "understand" that addresses can be negative, and thus will operate correctly with addresses over 2GB.




回答2:


Any system can be brought down by a too heavy load.

But in normal use in Windows and any other virtual memory OS, the memory consumption of other programs does not much affect any given program execution.

Getting an out of memory error is unusual, but it can happen if you make a large allocation or if you declare a large local automatic variable. It can also happen if you fail to properly deallocate memory that's no longer used, i.e. if the program is leaking memory. For a 32-bit program on a 64-bit machine it's then not memory itself that's used up, but available address space within the program.



来源:https://stackoverflow.com/questions/25864105/is-it-true-that-32bit-program-will-be-out-of-memory-if-other-programs-use-too-m

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!