boost :: interprocess :: managed_shared_memory:Grow():内存重用?

时间:2014-03-27 10:32:06

标签: c++ boost boost-interprocess

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

在增长的同时,如果连续的内存不可用,则为具有X + Y mb的新块分配不同的基址。先前分配的X ​​mb块会发生什么? boost会不会删除它,因为它已经取消映射而没有进程引用它?

1 个答案:

答案 0 :(得分:2)

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

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

最重要的是未从程序堆中分配。操作系统将共享内存映射到进程空间

以上所有

  • 它的平台定义了内存是否被重用(这里重用仅仅意味着是否保留了当时内存中的页面;如果地址被更改,这实际上没有任何意义,因为它&# 39;只是将相同的页面重新映射到进程空间中的其他虚拟地址。)

换句话说(正如你已经半暗示的那样),在取消映射内存后, boost对delete 没有任何意义,因为在第一次没有从堆中分配任何内容的地方。