内存分配问题

时间:2010-07-21 06:40:59

标签: memory-management operating-system

我有以下问题  我有我的计算机RAM 2.5 GB我想要的是,如果有可能,如果分配完全内存到某些进程或例如  char * buffer=malloc(2.4GB),没有更多进程(谷歌浏览器,计算机等的微软游戏)可以运行吗?

4 个答案:

答案 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 虚拟地址空间。由于碎片化,这种连续的自由记忆几乎是不可能的。