下面是我在通過C/C++第5版閱讀< Windows時遇到的另一個問題。首先,讓我們看看一些報價。關於內存頁面保護的問題
LPVOID WINAPI VirtualAlloc(
__in_opt LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD fdwAllocationType,
__in DWORD fdwProtect
);
最後一個參數,fdwProtect, 表示保護屬性 應分配給區域。 與區域關聯的保護屬性對映射到 區域的已提交存儲無效。
當預留區域,指定將與存儲使用 最常見的保護屬性致力於 該地區。例如,如果您 打算提交 保護屬性 PAGE_READWRITE,您應該保留帶有PAGE_READWRITE的 區域。 當 區域的保護屬性匹配 已提交存儲的保護 屬性時, 系統的內部記錄保留 的行爲更有效。
(當commiting存儲)......你平時 傳遞相同的頁面保護 時 的VirtualAlloc被稱爲預留 區域,雖然你可以指定一個 不同的保護屬性是使用屬性。
以上引用完全讓我感到困惑。
如果與區域相關的保護屬性對已提交的存儲沒有影響,爲什麼我們需要它?
由於推薦爲保留和提交使用相同的保護屬性,爲什麼Windows仍爲我們提供使用不同屬性的選項?難道它不是領先的,而是一種悖論?
究竟哪裏是保護屬性存儲保留區域和致力於存儲,repectively?
非常感謝您的見解。
感謝您的回覆,我會看看鏈接。 – smwikipedia 2010-11-23 09:20:08
由於守衛頁面,堆棧似乎可以自動增長。如果沒有CPU硬件的支持,我認爲這是不可能實現的。 PAGE_GUARD屬性存儲在Page Table Entry(PTE)中,CPU可以檢測對這樣的頁面的訪問並觸發異常。我對嗎? – smwikipedia 2010-11-23 09:34:35