んだなぁ,と試してて思った。
以下のようなプログラムだとすぐメモリがあふれて死にそう(というか OOM Killer にやられる) な気がするけど実際そうならない。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
size_t alloc = 0;
for (;;) {
char *mem = malloc(1024 * 1024 * 1024);
++alloc;
printf("%zd GiB allocated\n", alloc);
sleep(1);
}
}
で,実行して top で見てみてもメモリ使用量はいっこうに増えない。
これを下のように編集すると状況が変わって,リアルにメモリを食い始める。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(void) {
size_t alloc = 0;
for (;;) {
char *mem = malloc(1024 * 1024 * 1024);
memset(mem, 0, 1024 * 1024 * 1024);
++alloc;
printf("%zd GiB allocated\n", alloc);
sleep(1);
}
}