2014-03-27 115 views
1

我正在使用boost :: interprocess :: managed_shared_memory。最初我分配了X MB内存。当进程内存耗尽时,我们将内存增加一个固定值(例如Y mb,执行unmap-> grow() - > map)boost :: interprocess :: managed_shared_memory:Grow():Memory Reused?

在增长时,如果连续内存不可用, + Y mb被分配了不同的基地址。先前分配的X ​​mb块会发生什么?增强是否会删除它,因为它已被取消映射,并且没有进程引用它?

回答

1

共享内存是平台特定的服务。

共享内存根据定义是虚拟的。

最重要的是没有从程序堆分配。共享内存是由OS映射到进程空间

随着上述所有

  • 它的平台定义的内存是否被重复使用(再利用这里将仅仅意味着无论是在内存中当时的页面保持不变;如果地址发生变化,这在现实中毫无意义,因为它只是将相同的页面重新映射到进程空间中不同的虚拟地址)。

换句话说(因为你已经在半暗示),之后的内存是未映射,升压无关delete,因为没有什么是有史以来在首位堆中分配。

+0

谢谢您的回复。这意味着不同于malloc(我们需要显式删除分配的内存),在增加共享内存后,不需要担心管理以前分配的内存。取消映射本身意味着内存/虚拟地址可供重用? – user1989504

+0

是的。这就是我所说的。好吧,试着说,反正:) – sehe

相关问题