12

テンプレート化されたオブジェクトのキャッシュの実装を知っている人はいますか?

  • キーを使用してオブジェクトを検索します (std::map<> と同じ)。
  • 同時にキャッシュに入れることができるオブジェクトの最大数を指定します
  • キャッシュにないオブジェクトを作成する機能があります
  • オブジェクトがキャッシュからいつ破棄されるかを知るための機能があります

例えば ​​:

typedef cache<int, MyObj*> MyCache;
MyCache oCache;
oCache.SetSize(1);
oCache.Insert(make_pair(1, new MyObj());
oCache.Touch(1);
MyObj* oldObj = oCache.Delete(1);

...

LRU または MRU キャッシュのように単純なものにすることができます。

どんな提案も大歓迎です!

ニック

4

3 に答える 3

3

Boost.MultiIndexライブラリを使用できます。MRU キャッシュの実装は簡単です。

于 2016-04-07T12:24:01.343 に答える
-5

アプリケーションでは、明らかに再作成できるオブジェクトを格納することで、パフォーマンスが高速化/向上するとはほとんど想像できません (ヒップ: キャッシュが上限に達すると、オブジェクトは自動的に破棄されるため)。sw キャッシュには、連想コードによるメモリフェッチが必要であり、メモリ割り当てやコンストラクタの実行 (主にメモリの初期化) よりも確実に遅くなります。

ページングメカニズムを回避するための手動ユーザー構成を除いて(正確にはパフォーマンスを向上させるためです)、ほとんどのOSはディスク上のメモリを「キャッシュ」します...それは「高コストのキャッシュ」の一種である「ページング」です。何も捨てられず、メモリ管理ユニットと呼ばれるサブプロセッシングユニットである特定のハードウェアによって行われます...

大局的に見れば、キャッシングコードは冗長でありながらプロセスを遅くします。

于 2008-09-23T20:41:01.857 に答える