MSVC では、ベース アドレスのランダム化がデフォルトのオプションです。(VS2005 以降?)
したがって、dll のベース アドレスを手動でリベースすることはもうありません。
しかし、VS2003 を使用するときの読み込みパフォーマンスを改善するために、すべての dll をリベースしました。
ASLR オプションを使用すると、読み込みのパフォーマンスが常に低下しますか?
(もちろん他の特典も受けられます)
MSVC では、ベース アドレスのランダム化がデフォルトのオプションです。(VS2005 以降?)
したがって、dll のベース アドレスを手動でリベースすることはもうありません。
しかし、VS2003 を使用するときの読み込みパフォーマンスを改善するために、すべての dll をリベースしました。
ASLR オプションを使用すると、読み込みのパフォーマンスが常に低下しますか?
(もちろん他の特典も受けられます)
短い答えはノーです。
ASLR を使用しないシステム (XP など) では、DLL を非優先アドレスにロードすると、いくつかのコストがかかります。
項目 2 と項目 3 は圧倒的に最大のコストであり、以前は DLL を手動でリベースする必要があった主な理由です。
ASLR を使用すると、フィックスアップは OS によって透過的に適用され、DLL が実際に優先アドレスに読み込まれたように見えます。コピー オン ライト障害はなく、プロセス プライベート ページは作成されません。また、フィックスアップは、画像全体ではなく、アプリが実際にアクセスするページにのみ適用されるため、余分なデータがディスクから読み取られることはありません。
それに加えて、手動のリベース スキームでは、すべてのベース アドレスの競合を防ぐことはできません (たとえば、異なるベンダーの DLL が互いに競合したり、OS DLL がホットフィックスによってサイズが大きくなり、予約済みの範囲にあふれたりする可能性があります)。他の DLL など)。ASLR はこれらの問題に対処するのにはるかに効率的であるため、システム全体を見ると、実際にパフォーマンスを向上させることができます。