关于boost :: interprocess :: managed_shared_memory->大小的难题

时间:2017-06-01 09:45:36

标签: c++ boost boost-interprocess

我有两个程序。

#include <iostream>

#include <boost/interprocess/managed_shared_memory.hpp>


int main(int argc, char const* argv[])
{
    boost::interprocess::shared_memory_object::remove("High");
    try {
        boost::interprocess::managed_shared_memory managed_shm(
                boost::interprocess::create_only,
               "High",
                512);
        std::cout << "success" << std::endl;
    }
    catch (boost::interprocess::interprocess_exception &ex) {
        std::cout << ex.what() << std::endl;
    }
    return 0;
}

它打印输出&#34; boost :: interprocess_exception :: library_error&#34;

但是将256更改为512,它会打印&#34;成功&#34;:

dt

256和512之间有什么区别?

1 个答案:

答案 0 :(得分:3)

256和512之间的差异是256。

对于系统上的段管理器控制块,256字节太小(可能是任何64位目标)。

开销可能会让您大吃一惊,但这有点意义,因为涉及“堆管理”(在Boost Interprocess中称为段管理)。

另见Bad alloc is thrown

  

有相当大的初始开销,在发生任何事情之前消耗320个字节。

(它还显示了不同分配方案/数据结构的图表)

如果您想要原始共享内存对象,而不使用段管理,请使用shared_memory_object