3

它看起来像这样:

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;

我没想到会这样。我虽然这两种分配算法在实现和性能上应该是相似的。如此巨大的差异是否有充分的理由。

编辑:测试是在大量迭代中进行的。

4

1 回答 1

0

尝试多次分配,看看它们是否都很慢或只有第一个。如果只有第一个很慢,那可能是因为需要提交支持共享内存的页面(而不仅仅是保留)。如果页面被提交,它可能仍然需要被分页(从页面/交换文件)。

任何除了初始分配的缓慢,都可以归因于高度调整的自由存储分配器(即新的)与 boost 用于管理共享内存段中“分配”的机制(例如,boost 可能使用可移植且更昂贵的同步序列化分配的机制)。

于 2011-10-03T15:57:42.433 回答