< Windows via C/C++ 5th Edition > を読んでいるときに出会った別の質問があります。まず、いくつかの引用を見てみましょう。
LPVOID WINAPI VirtualAlloc(
__in_opt LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD fdwAllocationType,
__in DWORD fdwProtect
);
最後のパラメーター fdwProtect は、領域に割り当てる必要がある保護属性を示します。 領域に関連付けられた保護属性は、領域にマップされたコミット済みストレージには影響しません。
領域を予約するときは、領域にコミットされたストレージで最も頻繁に使用される保護属性を割り当てます。たとえば、PAGE_READWRITE の保護属性で物理ストレージをコミットする場合は、PAGE_READWRITE で領域を予約する必要があります。領域の保護属性がコミットされたストレージの保護属性と一致する場合、システムの内部記録保持はより効率的に動作します。
(ストレージをコミットするとき)...通常は、VirtualAlloc が呼び出されて領域を予約したときに使用されたのと同じページ保護属性を渡しますが、別の保護属性を指定することもできます。
上記の引用は私を完全に困惑させました。
領域に関連付けられた保護属性がコミットされたストレージに影響を与えない場合、なぜそれが必要なのですか?
予約とコミットの両方に同じ保護属性を使用することが推奨されているのに、なぜ Windows は異なる属性を使用するオプションを提供するのでしょうか? それは誤解を招き、パラドックスのようなものではありませんか?
予約済み領域とコミット済みストレージのそれぞれの保護属性は、正確にはどこに保存されていますか?
あなたの洞察に感謝します。