4

malloc が VirtualAlloc() 関数を呼び出してメモリを割り当てる場合 (最小 4Kb を割り当てます)、malloc はどのように int に 4 バイトを割り当てますか?

4

2 に答える 2

8

mallocページサイズの倍数でOSからメモリを要求し(明らかに、ページサイズは定義により割り当てられたメモリの量であるため)、小さなチャンクでそれを渡します。

これは、すべてのメモリ アロケータが行うことと同じです。実際、舞台裏Boost.Poolで使用する特殊なメモリ アロケータ (例: ) は、これをもう一度正確に行います。つまり、より大きなメモリ チャンクを割り当てて、それを小さな断片に分けてユーザーに渡します。mallocmalloc

于 2014-01-28T16:20:13.937 に答える
1

私が取り組んでいるアプリケーションは、Doug Lea の malloc.c 実装 ( ftp://g.oswego.edu/pub/misc/malloc.c ) を内部的に使用しており、多くのプラットフォームで広く使用されています。

この実装は、VirtualAlloc を使用して予約およびコミットされた 64KB チャンクの Windows の場合、システムからメモリを取得しています。次に、さまざまなアルゴリズムと構造を使用して、このメモリを可能な限り効率的に使用します。

2 バイトの割り当てをテストしたところ、デバッガーから、最初に 4 バイトにパディングされ、SmallBins に入れられることがわかりました。これは、小さなメモリ割り当てを処理する方法です。最終的に、この割り当ての実際のメモリ使用量は 16 バイトであることがわかりました。しかし、これはおそらくプラットフォームに依存します。

于 2014-01-28T16:34:03.733 に答える