gpt4 book ai didi

c++ - WriteProcessMemory 和类似函数是否会使可能缓存的数据无效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:19 25 4
gpt4 key购买 nike

我有一个现有程序需要通过 IPC 进行通信。我可以修改它的一小部分,但不能添加任何花哨的解决方案,如共享内存、管道或套接字。所以我想与直接读取/写入程序地址空间的函数进行通信:

  • process_vm_writev 在 Linux 上
  • WriteProcessMemory 在 Windows 上
  • mach_vm_write 在 macOS 上

如果我使用这些函数之一修改内存中的值,旧值的可能缓存拷贝是否失效?如果不是,volatile 指针是否足以立即检索新值?

最佳答案

WriteProcessMemory 会很高兴地完全按照它告诉的去做。它写入内存,之后 CPU 缓存将以逻辑上有效(但未指定)的状态结束。

但是,请注意其他程序并不知道这些写入。如果它有自己的缓存想法,包括在寄存器中缓存变量值等机制,那么这些拷贝将不会被更新。操作系统无法知道每种语言如何实现这种缓存机制,但性能问题决定了大多数严肃的编程语言都具有这样的机制。

如果写入的程序使用 C 或 C++ volatile 指针,则可以部分缓解这种情况。编译器无法完全消除读取。但是,只要这些指令不可可观察,就可以使用其他指令对此类读取进行重新排序。这可能会影响它们的计时,从而产生类似于缓存的效果 - 您的 WriteProcessMemory 可能来不及了。

关于c++ - WriteProcessMemory 和类似函数是否会使可能缓存的数据无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53192201/

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