0

次のようなことはありますか?

  • 多くの可変サイズのオブジェクトを断片化せずに割り当て/割り当て解除/再割り当てし (基本的には何をするかmalloc)、
  • これらの割り当てに使用されたすべてのメモリ ページを追跡できるので、
  • 後でmprotectこれらのページをすべて読み取り専用にする
  • できればロックなし - すべてのアクセスはシングルスレッドになります
  • Linux と OS X で動作し、できれば Windows で同等のものを使用できますか?

標準のメモリ割り当て関数でこれを行う方法は考えられません。頭に浮かぶ唯一の戦略は、カスタム メモリ プールの代わりに使用することですmallocmallocだから私の質問は次のとおりです。カスタムまたは(ない場合)何を使用するかについての提案なしでこれを行う方法はありますか?

使用したすべてのページを非常に簡単にラップmallocして追跡できますmprotect。これらのページを呼び出すmallocと、割り当てられたブロックの開始前または終了後に「キャッチ」されたメモリを使用しようとしないことを保証するにはどうすればよいですか影響を受けるページの 1 つに含まれていますか?

4

1 に答える 1

1

オープン ソースのメモリ プール システムは、MPS 自体が触れないオペレーティング システムのページ サイズのチャンクにメモリを割り当てます。mprotect必要に応じてこれらのページを作成できますが、アロケーター自体 (すべてのデータ構造を別の場所に保持している) または他のメモリ プールによってアクセスされないことを確認してください。MVTプール クラスを使用すると、インライン ロックレス割り当ても利用できます。 Linux、Mac OS X、および Windows がサポートされています。

免責事項: 私は MPS のアーキテクトです。

于 2013-06-03T20:31:02.747 に答える