したがって、256 MB のメモリを割り当てるこのプログラムがあり、ユーザーが Enter キーを押すと、メモリが解放されて終了します。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *p, s[2];
p = malloc(256 * 1024 * 1024);
if ( p == NULL)
exit(1);
printf("Allocated");
fgets(s, 2, stdin);
free(p);
return 0;
}
このプログラムを複数回実行し、割り当てることができる十分なメモリがなくなるまで、それぞれをバックグラウンドで実行しました。しかし、それは決して起こりません。Linuxtop
コマンドを実行しましたが、このプログラムを何度も実行した後でも、空きメモリが 256 MB 近く減ることはありません。
ただし、calloc
代わりに使用するmalloc
と、大きな違いがあります。
p = calloc(256 * 1024 * 1024, 1);
プログラムを実行してバックグラウンドで実行すると、実行するたびに空きメモリが 256 MB 減少します。どうしてこれなの?malloc
使用可能な空きメモリが変更されないのはなぜcalloc
ですか?