下面是我在通过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