#include <stdlib.h>
int main() {
int *p;
while(1) {
int inc=1024*1024*sizeof(char);
p=(int*) calloc(1,inc);
if(!p) break;
}
}
Run Code Online (Sandbox Code Playgroud)
跑
$ gcc memtest.c
$ ./a.out
Run Code Online (Sandbox Code Playgroud)
运行时,此代码会填满 RAM,直到被内核杀死。使用 calloc 而不是 malloc 来防止“懒惰评估”。来自该线程的想法:https : //stackoverflow.com/questions/4383059/malloc-memory-questions
这段代码很快填满了我的 RAM (4Gb),然后在大约 2 分钟内填满了我的 20Gb 交换分区,然后它就死了。这适用于 64 位 Linux。如果您使用 32 位操作系统,它在死之前将有 2 或 4GB 的限制。