WriteProcessMemory
с радостью сделает именно то, что ему говорят. Он записывает в память, и кэш (-ы) ЦП в конечном итоге окажутся в логически допустимом (но не указанном) состоянии.
Однако имейте в виду, что другая программа не уведомлена об этих записях. И если у него есть своя собственная идея кэширования, включая такие механизмы, как кэширование значений переменных в регистрах, то эти копии НЕ будут обновляться. Не существует способа, которым ОС может знать, как каждый язык реализует такие механизмы кэширования, но проблемы производительности диктуют, что большинство серьезных языков программирования имеют такие механизмы.
Если написанная программа использует указатели C или C ++ volatile
, это частично смягчается. Компилятор не может полностью исключить чтение. Однако такие чтения могут быть переупорядочены с помощью других инструкций, если они не наблюдаемые . Это может повлиять на их время, что дает эффект, аналогичный кешированию - ваш WriteProcessMemory
может быть слишком поздно.