在boost-interprocess中内存分配缓慢
slow memory allocation in boost-interprocess
看起来是这样的:
MyType * pMy = my_segment->construct<MyType>(anonymous_instance)();
my_segment->destroy_ptr(pMy);
其中MyType是一些典型的结构体,my_segment是正确构造的boost::interprocess::managed_shared_memory *大约比等效的
慢10倍。MyType * pMy = new MyType();
delete pMy;
我没有想到这一点。我认为这两种分配算法应该在实现和性能上相似。有什么好的理由造成如此巨大的差异吗?
编辑:测试是在大量的迭代中进行的。
尝试多个分配,看看它们是否都很慢,还是只有第一个。如果只有第一个慢,可能是因为支持共享内存的页面需要提交(而不仅仅是保留)。如果提交了页面,它可能仍然需要(从页面/交换文件)分页。
初始分配的任何缓慢都可以归因于高度调优的自由存储分配器(即new)与boost用于管理共享内存段中的"分配"的机制(例如,boost可能使用可移植且更昂贵的同步机制来序列化分配)。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 在boost-interprocess中内存分配缓慢