2012-01-17 14 views
2

malloc/callocは、Cのstdlibで定義されている古い実装です。 malloc/callocの代わりにを実装する方が良いでしょうか? malloc/callocメソッドのラッパーメソッドには答えないでください。 Cでメモリを割り当てる新しい実装では、独自のメソッドを実装するのではなく、malloc/callocを呼び出すべきではありません。Cでメモリを割り当てるためのmalloc/callocより優れた実装はありますか?

+2

「良い」というような品質はなく、ベンチマークしかありません。 –

+0

C言語で動かないのですか?C++も使えますか?そこにあなたは新しいキーを持つでしょう。しかし、malloc/freeをnew/deleteと混在させる場合は注意してください。この方法はどんな仕事をするべきですか? (例えば、最大サイズの配列を設定することは可能ですが、これは既に知られている型です...) – Beachwalker

+5

* mallocは古い実装です*古いので壊れていますか? –

答えて

1

calloc()機能を試しましたか?私はそれを使用したことはありませんが、一部の人々が持っていた。

calloc tutorial link

+0

callocは、割り当てられたメモリが0になっているmallocです。 –

+0

@Paul R.はい、元の質問には有用な要件がないため、「実装がより簡単」と考えることができます。 – Roddy

3

Hoardメモリ割り当てのパフォーマンスを改善することを目指している、「malloc()のドロップイン置換」です。

また、dmallocは、メモリ割り当ての問題をデバッグしやすくすることを目的とした、もう1つの「ドロップイン置換」です。

多分あなたのためにそれらの作品。何か理由がないので、なぜmalloc()を交換したいのか分かりにくいです。

10

アプリケーションがマルチスレッド化されていない限り、おそらく気にしないでください。 This article suggests (for one platform, at least) that malloc performs quite competitively in a single threaded environment

したがって、どのアロケータをアプリケーションで使用する必要がありますか? Solaris OS上のmallocは、シングルスレッドコードの強力な選択肢であることが示されています。

Note the first case

Note the first case

あなたはハードmallocまたはその非常に類似した機能よりも良いを行うために押されるでしょう。より良いメモリ割り当てが必要な場合は、mallocをラップするか、オペレーティングシステムのメモリ割り当て関数を呼び出して(移植性を失う)、独自の割り当てロジックをメモリのチャンクの上に置きます。あなた本当にが良いメモリアロケータが必要な場合は

Hoardしてみてください:

ホードメモリアロケータは、Linux、Solaris版、Mac OS X用、高速でスケーラブル、かつメモリ効率のメモリアロケータで、 Windows。 Hoardはmallocのドロップイン置換えであり、特にマルチプロセッサとマルチコアCPUで動作するマルチスレッドプログラムの場合、アプリケーションのパフォーマンスを大幅に向上させることができます。

Benchmark

it's not necessarily freeいます。無料のものをご希望の場合はone of theseをお試しください。

1

googleですばやく検索すると、mallocと同じように効果的にメモリを割り当てる他の方法はないことがわかりました。私が見たものから、あなた自身のmalloc置換えを作成しようとするのはかなり難しくて厄介です...

brk()sbrk()を使用できますが、標準Cの一部ではなく、Unixyシステムでのみ正常に動作します。 mmap()も一見価値がありますが、同じ欠点があるようです。

1

nedmallocは、CRTメモリ機能の代わりにドリップとして使用することができます。また、既にコンパイルされたアプリに注入することもできます。

あなたはglibcのを使用している場合、あなたはあまり心配してはいけませんが、dlmallocに基づいてその非常に良いアロケータは、彼らはあなたが本当にこれらの日を心配する必要がある唯一の時間は、マルチスレッドの競合が問題である割り当てがありますこの場合、nedmalloc、tcmallocまたはTBB mallocが必要です。

関連する問題