0

ループで 4096 バイト (4KB) を割り当てるプログラムがあり、4 回目の繰り返しの後、仮想メモリ サイズが 16 KB 増加することがわかります。つまり、ブロックサイズは 16 KB です。これを見つけるためのunixコマンドは何ですか? getconf PAGE_SIZE を使用して 4KB のページ サイズを取得できますが、ブロック サイズを見つける必要があります。

4

1 に答える 1

0

通常の構成で使用していると仮定するとglibc、メモリ割り当ては一度に 4KB ずつ増加すると予想されます。しかし、サイズを表示するために使用しているツールが、このようなわずかな違いを示すほど細分化されていないのではないでしょうか?

明らかに、あなたの glibc は、私が入手したソースとは異なる構成になっている可能性がありますが、4KB に丸められた、要求したブロックのサイズを( を介してsbrk、システム コールを呼び出して) 割り当てます (正確なソース: 、すぐに続きます。brksize = (size + pagemask) & ~pagemask;if (size > 0) brk = (char*)(MORECORE(size));

もちろん、x = malloc(4096);そうすると、実際の割り当ては 4KB を超える少数のバイトになります。これmallocは、割り当て自体を追跡するために追加のデータが必要になるためです (現在の割り当てのサイズ、以前の割り当てのサイズなど)。 . の全体のオーバーヘッドは、少なくとも 2 * sizeof(size_t) + 2 * sizeof(some pointer) = 32 ビット システムで 16 バイト、64 ビット システムで 32 バイトです。それ以上かもしれません。

于 2013-10-21T23:06:35.180 に答える