Linux mint64 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
以下程序在我刚刚安装的 Linux Mint 15 上运行在上述 64 位系统上时失败。它在具有 4GB 的“物理”内存的 VM 中运行。在我的 Mac 和
Linux hercules 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
ulimit 断言没有有效的限制。strace 显示 mmap 失败:
mmap(NULL, 4836167680, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
进一步的实验表明,打开 overcommit 可以让它“工作”。
free
命令显示:
$ free
total used free shared buffers cached
Mem: 3993228 3098188 895040 0 137680 2255620
-/+ buffers/cache: 704888 3288340
Swap: 1046524 0 1046524
图中是否有一些新的控制机制?如果手头有大量(?)物理内存,为什么交换很重要?
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
void *m = malloc(4836032512);
if (m == 0) {
fprintf(stderr, "Could not allocate ~4MB of memory with malloc?\n");
return 1;
}
return 0;
}
现在似乎很明显,如果你要求 4gb 的内存,你最好有超过 4gb 的内存,而我尝试过的其他系统也有超过 4gb 的内存。