我有以下问题
我有我的计算机RAM 2.5 GB我想要的是,如果有可能,如果分配完全内存到某些进程或例如
char * buffer=malloc(2.4GB)
,没有更多进程(谷歌浏览器,计算机等的微软游戏)可以运行吗?
答案 0 :(得分:1)
可能不是。首先,您的操作系统将受到保护,即malloc最终成为您操作系统中的系统调用,因此它将失败而不是杀死所有内容。 其次,由于虚拟内存,你可以拥有比RAM更多的内存,这样即使你的操作系统允许你分配2.5演出,它仍然可以运行和运行进程。
答案 1 :(得分:1)
虽然它依赖于操作系统和编译器,但在32位窗口下的Visual C ++上,您通常无法一次使用超过512MB的malloc。这由预处理器常量_HEAP_MAXREQ控制。有关我曾经解决此限制的方法的详细信息,请参阅以下thread如果您转到64位,这也不再是一个问题,尽管您最终可能会使用比预期更多的虚拟内存
答案 2 :(得分:0)
计算机使用虚拟内存,这与实际大小的RAM无关。
答案 3 :(得分:0)
在像Windows这样的操作系统中,每个进程获得4GB(假设32位操作系统)虚拟地址空间,无论您拥有多少RAM都无关紧要。在这种情况下,malloc(2.4GB)肯定会失败,因为用户地址空间仅限于2GB。即使分配2GB,很可能也会失败,因为系统必须为malloc分配2GB的 continuos 虚拟地址空间。由于碎片化,这种连续的自由记忆几乎是不可能的。