我有一个现有的32位应用程序,它分配了相当大的RAM(> 128 MB)(通过malloc / new)并填充了一些图像数据(多个帧值)。通过SDK-API调用,应用程序的插件可以访问该块RAM开头的只读指针(const char *)。其他API调用可用于检索元数据,如宽度/高度/位深度等。在SDK-API调用之外,我没有/很少控制此应用程序。
我还有另一个64位应用程序(在我的控制下),它需要上面的数据作为输入,并且需要更多的RAM,因为上采样/ 3D卷重建可以保证64位进程。
我希望在64位进程中共享映射到32位进程中的现有指针的物理内存(最初不是通过诸如CreateFileMapping / MapViewOfFile之类的调用而是通过malloc / new运算符调用创建的)。
甚至可能吗?
通常我会在32位进程中创建一个相同大小的共享内存,复制内容并使用一些同步方法来表示数据可用。然而,在我的情况下,32位进程也变得拥挤许多插件,因此它非常接近可用虚拟空间的限制。由于内存碎片,MapViewOfFile可能会失败。由于我只需要一块RAM的只读副本,所以我试图避免额外的分配和复制。
我的目标是64位Windows 7,Visual C ++ 2010/2015
答案 0 :(得分:1)
没有。对于初学者来说,"共享内存"实际上是共享页面。您的malloc
调用无法保证返回页面对齐的内存。此外,必须在虚拟地址空间的空闲区域中创建这些共享页面,但malloc
内存由已分配和未共享页面支持。