2011-01-11 6 views
9

大きな固定サイズのバッファを1つ使用する汎用のmalloc実装が必要です。 "Zero-malloc memory allocator" SQLiteに似たものがあります。そのような実装について知っていますか?組み込み用途に使用できる軽量でポータブルでなければなりません。固定サイズバッファからのmalloc実装

ありがとうございます。

+0

mallocに問題がありますか? – mathk

+0

@Mathk:メモリ断片化(またはそうでない)。どのくらいの量のメモリカーネルがプロセスに割り当てるか手前で知りたい。 – Manish

答えて

6

つの提案:

  1. あなたが何かの生産品質を必要とし、十分にテスト場合は、ちょうどSQLiteののアロケータを借ります。 SQLiteのソースコードは非常によく書かれ、文書化されており、非常によくテストされており、非常に容認しやすいオープンソースのライセンスを持っています。
  2. あなたは小型でシンプルなものを必要とする、のいずれかを学習したり、組み込み環境で使用するために、this implementation考える IF [恥知らずなプラグインを!] - コメントCコードのちょうど350 LOC。
+0

リンク先の投稿者のコメント者の一部に同意します。この種のアロケータは、組み込みシステムの堅牢性の問題(壊滅的な断片化)を解決するものではありません。 OPは要件をよりよく述べ、彼が求めたものが本当に問題を解決できるかどうかを検討する必要があります。 –

+0

@R:断片化の欠如はそのアロケータの目的ではなく、むしろ組み込みアプリケーションに必要なヒープメモリの総量を信頼性のある方法で計算することでした。 –

+1

ありがとうございます。私はテスト目的のために簡単な実装を探していました。 reallocが実装されていないことがわかります。私は使用しているreallocsを持っている大きなコードベースを使用することを計画していた。私はあなたと他の人を示唆して、SQLiteの実装を移植するのが最善だと思います。 – Manish

4

SQLiteのソースコードは無料で入手できます。特定の実装が好きな人は、それを使用しないでください。

1

最新のmallocの実装は、OSから取得した大きな容量のメモリを彫刻して動作します。ブロックがなくなると、mallocはOSに新しい大きなブロックを要求します。

既存のmalloc実装(たとえばglibc)に独自の実装を組み込むことができ、OSからブロックを取得する代わりに、1つの静的バッファを使用します。それがなくなると、OSが新しいブロックを提供できないときと同じように、mallocが失敗し始めます。

関連する問題