0

アプリケーションでメモリ管理にルックアサイドリストを使用できるようにしようとしています。私はこの主題に関する様々な論文から以下の詳細を知っています。

  1. ルックアサイドリストは、ヒープベースからのオフセット+0x688にあります。
  2. 各メンバーの長さは48バイトです。
  3. lookasidelist [0]、lookasidelist[1]は使用されていません。
  4. lookasidelist[n]ブロックのサイズはn*8で、(n-1)* 8バイトブロック(残りの8バイトはヘッダーに使用)を格納するために使用され、オフセット0は、サイズ(n-1)の空きチャンクを含むリンクリストを指します。 )*8nullで終了します。
  5. ルックアサイドリストは、XP SP3ではデフォルトで有効になっており、Vista / Win 7システムでは無効になっています(Vista / Win 7では低フラグメンテーションヒープが使用されます)

私が直面している問題は、私のアプリケーションがLookasideリストを使用していないように見えることです。ルックアサイドリストから割り当てが行われていないようで、解放されたすべてのブロックがフリーリストに移動されます。アプリケーションがルックアサイドリストを使用するために、特定のコンパイラフラグまたは条件が満たされる必要がありますか?アプリケーションはMicrosoftVisualC ++ 2010 Express Editionでコンパイルされ、WindowsXPSP3でテストされています。ルックアサイドリストが使用されているかどうかを確認するためにイミュニティデバッガーを使用しています。より良い方法があれば私に知らせてください。

4

1 に答える 1

1

デバッガーを介してプロセスを実行する代わりに、実行時にプロセスにアタッチすると、アプリケーションがデバッグされていないときにルックアサイドリストを使用することを決定したことが明らかになりました。これは私がそれが文書化されているのを見た唯一の場所です。

ヒープマネージャは、デバッグオプションが有効になっておらず、ヒープが拡張可能である限り、ヒープの作成時に自動的にルックアサイドリストを作成します。

于 2012-06-11T20:37:34.390 に答える