首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost::Intrusive for HPC

Boost::Intrusive for HPC
EN

Stack Overflow用户
提问于 2011-07-30 16:51:51
回答 1查看 455关注 0票数 4

boost::intrusive库在高性能计算方面有多好?我想对一个不可复制、不可赋值的类使用容器。我计划在shared_ptr中使用普通的STL。我发现boost::intrusive也可以用于相同的目的。所以我的问题是,他们真的那么高效吗?

如果让你在具有shared_ptr类型的STL容器和boost::intrusive之间进行选择,你会选择哪一个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-30 19:16:36

一般来说,侵入式收集在内存使用方面是最有效的。如果您的目标是压缩最后一个cpu周期,那么这是唯一的方法。

考虑boost共享指针的列表。创建新对象时,会发生以下情况:

从堆分配的对象和从原始指针复制boost共享指针的initialized

  • constructor将堆上的另一个对象分配给存储该对象的引用计数器(这就是为什么boost侵入式指针更好的原因,因为引用计数器存储在对象中)避免此allocation)

  • list::insert分配列表节点并复制共享指针

在上面的代码中,要创建一个新对象并将其插入到集合中,需要进行三次内存分配。

现在考虑使用侵入性列表。对于相同的任务,会发生以下情况:

分配一个新对象,initialized

  • list::insert只是将节点指针分配给该对象的列表,因为该节点是嵌入在对象中的,并且已经被分配了

在这里,只有一次内存分配发生。由于cpu在使用侵入式收集时寻址的内存较少,因此cpu缓存得到了更好的利用,从而减少了缓存未命中并减少了内存占用(称为引用局部性原则)。

侵入式集合的缺点是,必须事先知道一个对象一次可以是什么类型和多少个集合的元素。在我的个人经验中,这种额外的前期思维导致了更干净、更简单的设计。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6882097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档