9

私は、std * alloc / free関数を使用して、Cプログラムの動的メモリを割り当て/解放する傾向があります。std関数の代わりにGLIBメモリ割り当て関数を使用する正当理由があるのではないかと思います。

コミュニティがこれらの解決策のいずれかが勝者/敗者である状況を指摘できれば幸いです。また、どちらかを使用した場合に発生する可能性のあるパフォーマンスの問題にも関心があります。

ありがとう !

州のプラットフォームに編集

これらのプログラムは通常、すべてのタイプのLinux / Unixディストリビューションで実行され、通常はgcc4.2を使用してコンパイルされた64ビットのアーチです。

4

3 に答える 3

8

私の意見では、GLib関数と標準ライブラリの関数の最も価値のある違いは、割り当てが失敗した場合にGLib関数がプログラムを中止することです。malloc()からの戻り値がNULL!であるかどうかを確認する必要はもうありません。それ以外は、割り当て戦略に違いはありません。内部でのg_malloc()呼び出しmalloc()ですが、ここで他の回答の1つに示されているように、それを変更することは可能です。

もう1つの違いは、GLib関数を使用すると、を使用して(基本的な)メモリリークチェックを実行できることですg_mem_profile()

GLibにはスライスアロケータもあります。これは、同じサイズのメモリチャンクを多数割り当てる場合に効率的です。malloc()これはシステムとを使用しませんfree()が、デバッグの目的でシステムを変更することは可能です。

于 2010-10-28T12:09:29.240 に答える
4

何らかの理由で基礎となる割り当て戦略を自分で制御したい場合は、malloc()/ free()の代わりにg_mem_set_vtable()を使用して独自の関数を使用できます。

これはmalloc/freeでも魔法のリンクオプションを介して可能ですが、GLIBはそのための明示的なAPIを公開し、mem-profiler-tableを使用して独自の割り当てと無料のロギングを追加する可能性もあります。

于 2010-10-28T12:00:30.663 に答える
2

基盤となるアーキテクチャによって異なります。SCO Unix feでは、mallocは「最適な」戦略に従います。これは、メモリが最適化されていますが、速度が制限されています。

したがって、プログラムがさまざまなシステム/プラットフォームの特別な仮定に依存している場合は、malloc戦略を制御することをお勧めします。

于 2010-10-28T09:30:20.797 に答える