Всегда ли ::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
* * 1013