gpt4 book ai didi

c++ - 关于 boost::interprocess::managed_shared_memory->size 的谜题

转载 作者:行者123 更新时间:2023-11-30 01:40:00 26 4
gpt4 key购买 nike

我有两个程序。

#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",
256);
std::cout << "success" << std::endl;
}
catch (boost::interprocess::interprocess_exception &ex) {
std::cout << ex.what() << std::endl;
}
return 0;
}

它打印输出“boost::interprocess_exception::library_error”

但是将 256 更改为 512,它会打印“成功”:

#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;
}

256 和 512 有什么区别?

最佳答案

256 和 512 之间的差是 256。

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

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

另见 Bad alloc is thrown :

There's considerable initial overhead, consuming 320 bytes before anything happened.

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

如果你想要一个没有段管理的原始共享内存对象,使用shared_memory_object

关于c++ - 关于 boost::interprocess::managed_shared_memory->size 的谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com