2012-05-12 4 views
3

私は現在宿題のためのmalloc実装を研究しています。Visual C++のmalloc実装ですか?

glibcで使用されているptmalloc、 、jemallocなど、FreeBSDで使用されているmalloc実装のいくつかのバージョンが存在することは知っています。

Visual C++ではどのバージョンの実装が採用されているのでしょうか? vC++チームが独自のバージョンを実装しましたか?

+5

これらはWindowsの[HeapAlloc](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366597%28v=vs.85%29.aspx)機能を使用して独自に実装されています。 –

+1

@BoPersson:厳密に言うと、それは本当に**自分のものではありません。彼らはちょうどWindowsの人が実装したものを再利用しました。 – Fanael

+0

私は、なぜLinuxやUnixのような既存の実装を採用しないのか分かりません。 –

答えて

5

mallocまたはnewをVC++コンパイル済みのプログラムで自分のリダイレクタを記述せずに呼び出すと、HeapAllocになります。これはNTヒープとも呼ばれます。

NTヒープは、Windowsのメモリチームによって開発されました。これらの人は、OSのすべてのメモリ管理を担当しています。ユーザーモードプロセスに仮想空間を割り当てます。ドライバーなどのためのメモリを扱います。同じチームがアプリケーションコード内の小さな割り当て用のコードを提供することは論理的です。私の経験からNTヒープは良いことです。大きな欠陥はありません。あなたは非常に特定の要件を持っている場合、他のアロケータがより良いパフォーマンスを発揮するかもしれません。一般的に、NTヒープは正しい出発点です。おそらくそれはあなたのニーズを満たすでしょう。

VC++はコンパイラです。これは、オペレーティングシステムで実行される実行可能ファイルを作成します。 「VC++実行環境」について話すのは正しくありません。

しかし、私はコンパイラ自体がコードをコンパイルするときにNTヒープを使用していないことを知っています。彼らは自分のアロケータを使います。彼らがなぜそうしたのか正確な理由はわかりません。

+0

詳しい説明。 http://stackoverflow.com/a/6494048/16673も参照してください。 – Suma