关于 boost::interprocess::managed_shared_memory->size 的谜题
A puzzle about boost::interprocess::managed_shared_memory->size
我有两个程序。
#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,它会打印 "success":
#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 字节对于您系统上的段管理器控制块来说太小(可能是任何 64 位目标)。
开销可能会让您感到惊讶,但它有一点意义,因为涉及 "heap-management"(在 Boost Interprocess 中称为 段管理)。
另见 Bad alloc is thrown:
There's considerable initial overhead, consuming 320 bytes before anything happened.
(它还显示了不同分配schemes/data结构的图表)
如果你想要一个没有段管理的原始共享内存对象,使用shared_memory_object
我有两个程序。
#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,它会打印 "success":
#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 字节对于您系统上的段管理器控制块来说太小(可能是任何 64 位目标)。
开销可能会让您感到惊讶,但它有一点意义,因为涉及 "heap-management"(在 Boost Interprocess 中称为 段管理)。
另见 Bad alloc is thrown:
There's considerable initial overhead, consuming 320 bytes before anything happened.
(它还显示了不同分配schemes/data结构的图表)
如果你想要一个没有段管理的原始共享内存对象,使用shared_memory_object