gpt4 book ai didi

c++ - 在给定处理器缓存的情况下,Windows 中的页面写入跟踪有多可靠

转载 作者:IT老高 更新时间:2023-10-28 23:16:09 24 4
gpt4 key购买 nike

是否 ::GetWriteWatch总是给出修改页面的最新列表?或者是否有可能因为处理器缓存,一些页面仍然被认为是未修改的,因为缓存的写入还没有被刷新到主内存?


考虑以下 C++ 代码片段:

auto ptr = ::VirtualAlloc(NULL, 8192, MEM_COMMIT | MEM_RESERVE, MEM_WRITE_WATCH);
auto num = new (ptr) int{};
::ResetWriteWatch(ptr, 8192);

// ... calculations that involve writing to 'num' ...

::GetWriteWatch(/* ... */);

这应该保留并提交两页虚拟内存,修改第一页,最后请求所有修改的页。

是否保证第一页被列出为通过调用 ::GetWriteWatch 修改?

最佳答案

直截了当的回答是假设

虽然文档没有提供显式保证,但可以假设它处理的是 MMU 和 CPU 以及低级内存管理。这与 API 的其余部分一样工作:参见 creating guard pages等等。总而言之,如果您不能指望它们精确到导致故障的指令,那么 API 的所有这些保护和保护功能将不会像它们实际的一半那么有用。话虽如此,这实际上是如何通过 OS/CPU/MMU/TLB/CACHE 完成的,对我来说有点不知所措——如果我弄明白了会更新。

在您的示例中,我会更担心编译器/优化器会在您身上耍一些花招 - 所以也许看看生成的程序集,看看实际写入的位置。

关于c++ - 在给定处理器缓存的情况下,Windows 中的页面写入跟踪有多可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56794207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com