C++ boost::进程间::托管共享内存:Grow():内存重用?

C++ boost::进程间::托管共享内存:Grow():内存重用?,c++,boost,boost-interprocess,C++,Boost,Boost Interprocess,我正在使用boost::进程间::托管共享内存。最初我分配X mb内存。当进程内存不足时,我们将内存增加一个固定的值(比如Y mb,执行unmap->grow()->map) 在增长过程中,如果连续内存不可用,则使用不同的基址分配具有X+Y mb的新块。以前分配的X mb块会发生什么情况?boost是否会删除它,因为它已经未映射,并且没有进程引用它?共享内存是一项特定于平台的服务 根据定义,共享内存是虚拟的 大部分不是从程序堆中分配的。共享内存由操作系统映射到进程空间 所有这些 是否重用内存是

我正在使用boost::进程间::托管共享内存。最初我分配X mb内存。当进程内存不足时,我们将内存增加一个固定的值(比如Y mb,执行unmap->grow()->map)


在增长过程中,如果连续内存不可用,则使用不同的基址分配具有X+Y mb的新块。以前分配的X mb块会发生什么情况?boost是否会删除它,因为它已经未映射,并且没有进程引用它?

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

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

大部分不是从程序堆中分配的。共享内存由操作系统映射到进程空间

所有这些

  • 是否重用内存是由平台定义的(此处的重用只是指是否保留当时内存中的页面;如果地址发生更改,这实际上并不意味着什么,因为相同的页面将被重新映射到进程空间中的不同虚拟地址)

换句话说(正如您已经暗示的那样),在内存被取消映射后,boost没有任何东西可以删除,因为从一开始就没有从堆中分配任何东西。

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