Boost管理的共享内存构造最终出现“总线错误”

时间:2018-11-27 12:57:18

标签: c++11 boost shared-memory boost-interprocess

我有一个代码,它将使用c ++ boost(大约2 Gigs)在托管共享内存上创建很大的段。而且如果我们的计算机上没有足够的内存,它将收到总线错误。

实际上,当我尝试使用构造函数在共享内存上写入时,会发生错误。创建细分时,它不会收到任何错误。我已经检查了段的大小和可用大小,它们都将显示值,如果有足够的内存来分配! (get_size返回2000000000!)。即使机器的容量不足!

我知道OS使程序认为存在足够的内存,但是我必须在不同的机器上运行代码,并且它必须在所有机器上都可以运行。我的意思是,即使没有足够的内存,它也绝不能崩溃,在这种情况下,我们应该抛出一个很好的异常。无论是否存在足够的内存。而且必须有一种方法可以通过编程的方式找到它。

所以,我想知道是否有什么办法可以了解存在哪些请求内存或“正在使用BOOST”?

这就是我想要的(或者至少要记住!)

// consider that we are going to create a shared memory segment with 2G size in a machine that only has 1G of RAM
boost::interprocess::managed_shared_memory segment(open_or_create, "name", 2000000000);
if (real_allocated_memory < actual_need)
    throw std::overflow_error("Not enough memory");
segment.find_or_construct(a huge object); // here is where I receive the error

0 个答案:

没有答案