加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:24:06 所属栏目:百科 来源:网络整理
导读:我有一个现有的程序,我需要通过IPC进行通信.我可以修改它的一小部分,但不能添加任何奇特的解决方案,如共享内存,管道或套接字.所以我想与直接读/写到程序地址空间的函数进行通信: linux上的process_vm_writev Windows上的WriteProcessMemory macOS上的mach_v
我有一个现有的程序,我需要通过IPC进行通信.我可以修改它的一小部分,但不能添加任何奇特的解决方案,如共享内存,管道或套接字.所以我想与直接读/写到程序地址空间的函数进行通信:

> linux上的process_vm_writev
> Windows上的WriteProcessMemory
> macOS上的mach_vm_write

如果我使用其中一个函数修改内存中的值,那么旧值的缓存副本可能会失效吗?如果不是一个易于检测到新值的易失性指针?

解决方法

WriteProcessMemory很乐意完全按照它所说的去做.它写入内存,然后CPU缓存将以逻辑上有效(但未指定)的状态结束.

但是,请注意其他程序没有意识到这些写入.如果它有自己的缓存概念,包括在寄存器中缓存变量值等机制,则不会更新这些副本.操作系统无法知道每种语言如何实现这种缓存机制,但性能问题决定了大多数严肃的编程语言都有这样的机制.

如果写入程序使用C或C易失性指针,则可以部分减轻这种情况.编译器无法完全消除读取.但是,只要不能观察到这些读取,就可以用其他指令重新排序.这可能会影响他们的时间,这会产生类似于缓存的效果 – 您的WriteProcessMemory可能为时已晚.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读