malloc/callocは、Cのstdlibで定義されている古い実装です。 malloc/callocの代わりにを実装する方が良いでしょうか? malloc/callocメソッドのラッパーメソッドには答えないでください。 Cでメモリを割り当てる新しい実装では、独自のメソッドを実装するのではなく、malloc/callocを呼び出すべきではありません。Cでメモリを割り当てるためのmalloc/callocより優れた実装はありますか?
答えて
calloc()
機能を試しましたか?私はそれを使用したことはありませんが、一部の人々が持っていた。
callocは、割り当てられたメモリが0になっているmallocです。 –
@Paul R.はい、元の質問には有用な要件がないため、「実装がより簡単」と考えることができます。 – Roddy
アプリケーションがマルチスレッド化されていない限り、おそらく気にしないでください。 This article suggests (for one platform, at least) that malloc
performs quite competitively in a single threaded environment。
したがって、どのアロケータをアプリケーションで使用する必要がありますか? Solaris OS上の
malloc
は、シングルスレッドコードの強力な選択肢であることが示されています。
あなたはハードmalloc
またはその非常に類似した機能よりも良いを行うために押されるでしょう。より良いメモリ割り当てが必要な場合は、malloc
をラップするか、オペレーティングシステムのメモリ割り当て関数を呼び出して(移植性を失う)、独自の割り当てロジックをメモリのチャンクの上に置きます。あなた本当にが良いメモリアロケータが必要な場合は
、Hoardしてみてください:
ホードメモリアロケータは、Linux、Solaris版、Mac OS X用、高速でスケーラブル、かつメモリ効率のメモリアロケータで、 Windows。 Hoardはmallocのドロップイン置換えであり、特にマルチプロセッサとマルチコアCPUで動作するマルチスレッドプログラムの場合、アプリケーションのパフォーマンスを大幅に向上させることができます。
注it's not necessarily freeいます。無料のものをご希望の場合はone of theseをお試しください。
googleですばやく検索すると、mallocと同じように効果的にメモリを割り当てる他の方法はないことがわかりました。私が見たものから、あなた自身のmalloc置換えを作成しようとするのはかなり難しくて厄介です...
brk()
とsbrk()
を使用できますが、標準Cの一部ではなく、Unixyシステムでのみ正常に動作します。 mmap()
も一見価値がありますが、同じ欠点があるようです。
- 1. メモリの割り当て/割り当て解除(WindowsではC++)
- 2. 割り当てられたメモリのビュー
- 3. C++静的に割り当てられたダブルエンドキュー実装
- 4. C++の動的割り当てメモリ内での動的メモリ割り当て
- 5. ポインタにもアドレスまたはメモリ割り当てがありますか?
- 6. ヒープまたはスタックからのメモリ割り当てですか?
- 7. C++リリース、メモリの割り当ては、コンストラクタ
- 8. ポインタとCでのメモリ割り当て
- 9. Cでの動的メモリ割り当て
- 10. C++でのメモリ割り当て
- 11. Cでのメモリ割り当て
- 12. オブジェクトにメモリを割り当てるC#
- 13. Linuxサーバーでjava(javaserverページ)を実行するための優れた実装方法はありますか?
- 14. 割り当てメモリ**
- 15. メモリ割り当て
- 16. メモリ割り当て
- 17. 割り当てメモリ
- 18. メモリ割り当て
- 19. 割り当てメモリ
- 20. コンパイルされた実行可能メモリ割り当ての変更
- 21. コンストラクタへのcharポインタのためにメモリを割り当てる必要はありますか?
- 22. UIImageはより多くのメモリを割り当てます
- 23. サービスはたくさんのメモリを割り当てますか?
- 24. は$ 1で割り当てるための速記があります... $ Nルビー
- 25. C++で接続を割り当てるためのサーバーとのピアツーピアチャットプログラムの良い実装は何ですか?
- 26. dllの境界を越えたメモリ割り当てと割り当て解除
- 27. ArcGIS C#のメモリ割り当てのクラッシュ
- 28. C++のメモリ割り当ての問題
- 29. newCStringで割り当てられたメモリを解放する
- 30. 客観C:メモリの割り当て
「良い」というような品質はなく、ベンチマークしかありません。 –
C言語で動かないのですか?C++も使えますか?そこにあなたは新しいキーを持つでしょう。しかし、malloc/freeをnew/deleteと混在させる場合は注意してください。この方法はどんな仕事をするべきですか? (例えば、最大サイズの配列を設定することは可能ですが、これは既に知られている型です...) – Beachwalker
* mallocは古い実装です*古いので壊れていますか? –