boost::intrusive库在高性能计算方面有多好?我想对一个不可复制、不可赋值的类使用容器。我计划在shared_ptr中使用普通的STL。我发现boost::intrusive也可以用于相同的目的。所以我的问题是,他们真的那么高效吗?
如果让你在具有shared_ptr类型的STL容器和boost::intrusive之间进行选择,你会选择哪一个?
发布于 2011-07-30 19:16:36
一般来说,侵入式收集在内存使用方面是最有效的。如果您的目标是压缩最后一个cpu周期,那么这是唯一的方法。
考虑boost共享指针的列表。创建新对象时,会发生以下情况:
从堆分配的对象和从原始指针复制boost共享指针的initialized
在上面的代码中,要创建一个新对象并将其插入到集合中,需要进行三次内存分配。
现在考虑使用侵入性列表。对于相同的任务,会发生以下情况:
分配一个新对象,initialized
在这里,只有一次内存分配发生。由于cpu在使用侵入式收集时寻址的内存较少,因此cpu缓存得到了更好的利用,从而减少了缓存未命中并减少了内存占用(称为引用局部性原则)。
侵入式集合的缺点是,必须事先知道一个对象一次可以是什么类型和多少个集合的元素。在我的个人经验中,这种额外的前期思维导致了更干净、更简单的设计。
https://stackoverflow.com/questions/6882097
复制相似问题