在boost-interprocess中内存分配缓慢

slow memory allocation in boost-interprocess

本文关键字:分配 缓慢 内存 boost-interprocess      更新时间:2023-10-16

看起来是这样的:

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可能使用可移植且更昂贵的同步机制来序列化分配)。