我有两个程序。
#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之间有什么区别?
答案 0 :(得分:3)
256和512之间的差异是256。
对于系统上的段管理器控制块,256字节太小(可能是任何64位目标)。
开销可能会让您大吃一惊,但这有点意义,因为涉及“堆管理”(在Boost Interprocess中称为段管理)。
有相当大的初始开销,在发生任何事情之前消耗320个字节。
(它还显示了不同分配方案/数据结构的图表)
如果您想要原始共享内存对象,而不使用段管理,请使用shared_memory_object