boost::interprocess::managed_shared_memory: Grow(): Memory R



我使用boost::interprocess::managed_shared_memory。最初我分配了X mb的内存。当进程用完内存时,我们将内存增加一个固定值(比如Y mb),执行unmap-> grow()-> map)

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

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

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

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

与以上所有

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

换句话说(正如您已经暗示过的那样),在内存被取消映射之后,boost对delete 没有任何影响,因为从一开始就没有从堆中分配任何内容。

最新更新