看起来像这样:
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;
我没想到这一点。我虽然两种分配算法在实现和性能上应该相似。有这么大的差异是有充分理由的。
编辑:测试是在大量迭代中进行的。
答案 0 :(得分:0)
尝试多次分配,看看它们是慢速还是只有第一次。如果只有第一个很慢,那可能是因为支持共享内存的页面需要提交(而不仅仅是保留)。如果页面被提交,它可能仍然可能必须被页面调入(来自页面/交换文件)。
禁止初始分配的任何缓慢都可以归因于高度调整的免费商店分配器(即新的)与用于管理共享内存段中的“分配”的机制(例如,boost可能使用便携式和更昂贵的同步机制来序列化分配)。