boost::intrusive
用于高性能计算的库有多好?我想为不可复制的不可分配类使用容器。我打算将普通 STL 与shared_ptr
. 我发现它boost::intrusive
也可以用于相同的目的。所以我的问题是,它们真的那么高效吗?
shared_ptr
如果在具有类型的 STL 容器和您更喜欢哪一个之间给出一个选项boost::intrusive
?
boost::intrusive
用于高性能计算的库有多好?我想为不可复制的不可分配类使用容器。我打算将普通 STL 与shared_ptr
. 我发现它boost::intrusive
也可以用于相同的目的。所以我的问题是,它们真的那么高效吗?
shared_ptr
如果在具有类型的 STL 容器和您更喜欢哪一个之间给出一个选项boost::intrusive
?
通常,就内存使用而言,侵入式集合是最有效的。如果您的目标是压缩最后一个 cpu 周期,那么这是唯一的方法。
考虑一个 boost 共享指针列表。创建新对象时,会发生以下情况:
在上面,创建新对象并将其插入集合中涉及三个内存分配。
现在考虑使用侵入性列表。对于相同的任务,发生的是:
在这里,只发生了一次内存分配。由于在使用侵入式集合时 CPU 寻址的内存更少,因此 CPU 缓存得到更好的利用,从而减少了缓存未命中以及减少内存占用(称为局部性原则)。
侵入式集合的缺点是它必须事先知道一个对象一次可以是什么类型和多少个集合的元素。根据我的个人经验,这种额外的前期思考会导致设计更简洁。