malloc が VirtualAlloc() 関数を呼び出してメモリを割り当てる場合 (最小 4Kb を割り当てます)、malloc はどのように int に 4 バイトを割り当てますか?
2 に答える
malloc
ページサイズの倍数でOSからメモリを要求し(明らかに、ページサイズは定義により割り当てられたメモリの量であるため)、小さなチャンクでそれを渡します。
これは、すべてのメモリ アロケータが行うことと同じです。実際、舞台裏Boost.Pool
で使用する特殊なメモリ アロケータ (例: ) は、これをもう一度正確に行います。つまり、より大きなメモリ チャンクを割り当てて、それを小さな断片に分けてユーザーに渡します。malloc
malloc
私が取り組んでいるアプリケーションは、Doug Lea の malloc.c 実装 ( ftp://g.oswego.edu/pub/misc/malloc.c ) を内部的に使用しており、多くのプラットフォームで広く使用されています。
この実装は、VirtualAlloc を使用して予約およびコミットされた 64KB チャンクの Windows の場合、システムからメモリを取得しています。次に、さまざまなアルゴリズムと構造を使用して、このメモリを可能な限り効率的に使用します。
2 バイトの割り当てをテストしたところ、デバッガーから、最初に 4 バイトにパディングされ、SmallBins に入れられることがわかりました。これは、小さなメモリ割り当てを処理する方法です。最終的に、この割り当ての実際のメモリ使用量は 16 バイトであることがわかりました。しかし、これはおそらくプラットフォームに依存します。