2012-02-24 8 views
1

私はComputing Scienceプロジェクトを行っています。私はCを使ってマルチプロセッサプログラミングをやっています。私たちには、小さなメモリを割り当てることはできません。必要に応じてメモリを大きなチャンクに割り当てることができます。アレイメモリ管理

私は私のプログラムで構造を使うと想像してください。私のプログラムが動作する方法は、動的メモリ割り当てが必要です。しかし、私たちが使用しているハードウェアは非常に高価です。したがって、最善の解決策は、最初に大きなプールを割り当て、必要に応じてこのプールからメモリを割り当てることです。

私は、これらの構造のビット配列を割り当て、このプールからメモリを割り当てて解放する独自のメモリ管理モジュールを作成します。しかし、私はこれらのモジュールを書くのに最も理想的な方法を知りたい。記憶を管理するのに役立つライブラリがありますか、あるいはこれらが書かれている方法がありますか?

EDIT:ここで私が使用しているプラ​​ットフォームは、Ubuntuを実行するAMD opteronシステムです。 opteronsにはNUMAアーキテクチャがあり、メモリを割り当てるときにこれを利用したいと思っています。したがって、mallocを使用する代わりに、私はnuma_alloc_onnodeを使用して、特定のノードにメモリを割り当てます。私はこれを使用して大きなメモリのチャンクを割り当て、このメモリを管理するためにメモリマネージャを使用したいと思います。

+0

と:ここではNUMAアーキテクチャ(記事の最後にソースコード)のヒープマネージャを作成するには良いの読み取りですOSでは誰にでも推薦することは難しいでしょう。 –

+1

@Carey:私が扱ってきたほとんどのメモリ管理システムは、特定のシステム制約について知っていても、かなりプラットフォームに依存しない(Cが利用可能な場所であればどこでも)。組み込みシステムは確かに重要です。 –

+0

@エリック:組込みシステムは私がそれを言及した理由です。 OPは彼が異例のプラットフォームを使用していることを暗示しているようである。 –

答えて

4

いくつかの商用ソースといくつかのオープンソースがあります。あなたはそれらを見て、あなたが概要を持っている後、ここでより具体的な質問を自由に感じてください。

一部のGoogleの結果(Cメモリプールマネージャのオープンソース):ここで

http://256stuff.com/sources/mpool/

http://www.ravenbrook.com/project/mps/

がIBMから件名に良い記事です:

http://www.ibm.com/developerworks/linux/library/l-memory/

そして、あなたがマルチプロセッサ環境に言及しているからです(ただし、メモリ管理にた関連の)、これも価値が読まれる:

http://drdobbs.com/go-parallel/article/showArticle.jhtml?articleID=217500206

UPDATE

ライブラリーの所望の移植性に応じて、異なるアプローチがあります。移植性が重要な場合、ライブラリはmalloc(またはcalloc)の周りにラッパーを提示してメモリのチャンクを取得し、より効率的な実装を適用します(ライブラリが達成したい特定の目標に対して測定されます)。特定のOSをターゲットとするライブラリは、通常、ネイティブのオペレーティングシステムコールを使用して、パフォーマンスを得て、移植性を犠牲にしてそのオペレーティングシステムの仕様を活用する能力を得ます。

メモリ管理ライブラリが目指す具体的な目標はさまざまです。ここで私は長年にわたって見てきたいくつかの目標です:

    急速
  • デバッグに削除されます物事対長く生きるもののために小さなオブジェクト対大
  • 個別の管理戦略の
  • 別々の管理戦略をメモリ管理の問題(例:割り当てられたメモリに特定のパターンを書き込み、末尾に余分なパディングを割り当てることで、デバッグ機能が境界外ポインタによってパディングが上書きされたかどうかを確認できるようにする)
  • 特定のプラットフォーム例えば、いくつかの配分は高価であり、他の配分は比較的安価かもしれない)。
  • メモリのデフラグメンテーションをサポートします(たとえば、実際にポインタにポインタを割り当て、メモリにアクセスする特別なセマンティクスで)。

UPDATE 2

あなたの更新に基づいて...私の第四箇条書きが適用されます。私が参考になるのライブラリがあると確信しているが、プラットフォームを知らなくても

http://ebookbrowse.com/numa-aware-heap-memory-manager-article-final-pdf-d12526838

+0

こんにちはEric、私はこれらのリンクを見上げました。私がそれらを正しく理解すれば、彼ら自身のメモリアロケータを使用し、オペレーティングシステムからメモリを取得します。しかし私の場合は、このアーキテクチャに特有の特定の呼び出しを使用してメモリのチャンクを取得する必要があります。次に、メモリマネージャはこのメモリチャンクを使用して管理する必要があります。これを満たすメモリマネージャはありますか? –

+0

長いコメントを書き始めると、私の答えを更新する方が良いと判断しました。 –

+0

あなたはNUMAプラットフォームを使っているという事実に基づいて私の答えを更新しました。 –

関連する問題