gpt4 book ai didi

c++ - 是否可以与另一个进程共享现有的 RAM block ?

转载 作者:可可西里 更新时间:2023-11-01 10:34:25 26 4
gpt4 key购买 nike

背景

我有一个现有的 32 位应用程序,它分配了相当大的 RAM (>128 MB) block (通过 malloc/new)并填充了一些图像数据(多帧值)。应用程序的插件可以通过 SDK-API 调用访问指向这 block RAM 开头的只读指针 (const char *)。其他 API 调用可用于检索元数据,例如宽度/高度/位深度等。在 SDK-API 调用之外,我无法/几乎无法控制此应用程序。

我还有另一个 64 位应用程序(在我的控制下),它需要上述数据作为输入,并且由于保证 64 位进程的上采样/3D 体积重建需要更多的 RAM。

问题

我希望与 64 位进程共享映射到 32 位进程中此现有指针的物理内存(最初不是通过 CreateFileMapping/MapViewOfFile 等调用创建的,而是通过 malloc/new 运算符调用创建的)。

有可能吗?

通常我会在 32 位进程中创建一个相同大小的共享内存,复制内容并使用某种同步方法来表示数据可用。然而,就我而言,32 位进程也因许多插件而变得拥挤,因此它非常接近可用虚拟空间的限制。由于内存碎片,MapViewOfFile 有可能失败。因为我只需要 RAM block 的只读拷贝,所以我试图避免额外的分配和复制。

我的目标是 64 位 Windows 7,Visual C++ 2010/2015

最佳答案

没有。对于初学者来说,“共享内存”实际上是共享页面。您的 malloc 调用决不能保证返回页面对齐的内存。此外,这些共享页面必须在虚拟地址空间的空闲区域中创建,但是 malloced 内存由分配的和未共享的页面支持。

关于c++ - 是否可以与另一个进程共享现有的 RAM block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35196420/

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