動的に割り当てられた複数回呼び出されたデータが、コードで直接指定されたものやmalloc
.
例
例として、C で次の 2 つのコードを作成しました。
test1.c: int x が割り当てられますmalloc
int main (void)
{
int *x;
int i, n=1048576; //n=1024*1024;
printf("size = %lu\n", n* sizeof(int));
for(i=0; i<n; i++)
{
x = malloc(sizeof(int));
*x=i;
}
printf("Look at top and then press something to finish.");fflush(stdout);
getc(stdin);
return 0;
}
簡単にするために、ここではfreeを使用しませんでした。プログラムが対話を待機しているときに、別の端末で一番上の関数を見ると、次のように表示されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1384 root 20 0 41300 34076 1300 S 0.0 3.3 0:00.47 test1
test2.c: int x が動的に割り当てられていません
int main (void)
{
int x[1048576]; //x[1024*1024]
int i, n=1048576;
printf("size = %lu\n", n* sizeof(int));
for(i=0; i<n; i++)
{
x[i]=i;
}
printf("Look at top and then press something to finish.");fflush(stdout);
getc(stdin);
return 0;
}
そしてトップは私を示しています:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1352 root 20 0 12404 5500 1304 S 0.0 0.5 0:00.05 test2
また、使用した test2 と同じ結果になる 3 番目のコードも実行しました。
x = malloc(n*sizeof(int));
for(i=0; i<n; i++)
{
x[i]=i;
}
プロセスのメモリ使用量に大きな違いがあるのはなぜですか? これは、malloc が新しいメモリ ページを要求し、メモリが無駄になっているためですか? またはmalloc
、より多くのメモリを割り当てますか?
test1 は合計メモリの3.3%を使用し、 test2 は0.5%を使用します。
環境:
Docker 内の Centos 5 64 ビットでこれらのテストを実行しています。
仮想環境のメモリ:
$ free -m
total used free shared buff/cache available
Mem: 995 98 845 3 51 808
Swap: 1162 194 967