windows 是否可以在(非继承的)进程之间共享指针?

kqlmhetl  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(126)

情况很简单,我有两个不相关的进程(普通C++编写的应用程序A和B,一个不是另一个的子进程),它们在同一个共享内存对象上操作。
在进程A中,我创建了一个句柄,它表示GPU内存的句柄,我希望在进程B中访问它。所以基本上我有一个空指针存储在共享内存对象中,uint_64表示支持指针的内存大小。
在进程B中,我成功Map到同一个共享内存。我从它那里得到了句柄并需要内存。size,这两个变量都有相同的值,就像它们在进程A中一样。所以直到它看起来很好,问题是,如果我试图使用句柄并导入内存,它似乎是无效的。
从我读到的内容来看,不同的进程有完全不同的内存Map,所以即使指针的值相同,它也可以指向完全不同的内存。是真的吗如果是这样的话,有没有办法在(非父进程->子进程)进程之间共享指针,使A中的值指向与B中相同的内存?
可能吗?我在Windows上,我可以使用特定于平台的解决方案。

wecizke3

wecizke31#

一般来说,每个进程都有自己的内存Map。存储器Map是从虚拟地址Map到物理地址的存储器区域的列表,即(vm_start,physical_start,size)元组的列表(以及可能的其他字段,诸如许可标志)。
因此,进程P1中的指针对与进程P2中相同的值进行操作,如果这些进程中的存储器Map在指针附近相同。默认情况下并非如此,如果需要,需要向两个进程的内存Map添加相同的条目(具有相同的physical_start)。这应该可以使用一些Windows API函数,即使是与GPU共享的内存。具体怎么做,我不知道。
如果没有设置它,进程P2通常会在使用来自进程P1的指针时错误地中止,或者P2会默默地修改一个不相关的值(在进程P2的未来引起问题)。
进程的父子关系不相关。

相关问题