将矢量放在堆栈上的好处

时间:2013-05-01 18:19:44

标签: c++

是否有任何真正的性能优势,担心将vector放在堆栈而不是堆上,因为内部vector会将内容放在堆上?

2 个答案:

答案 0 :(得分:3)

如果有的话可以忽略不计。但是,您应该记住的一件事是,堆的实际分配进程比堆慢。 那是

vector<T> t; 

vector<T>* t = new vector<T>; 

由于在堆栈上分配基本上只涉及移动堆栈指针。

所有的生活时间问题除外,如果你必须分配很多载体,你可能会在这个小的性能损失上积累。

但是,如果您有少数载体,那么在我看来,没有明显的收益。

我应该提一下,担心堆栈和堆分配带来的性能提升会在premature optimization下失败。因此,只需选择哪种更适合您的需求并使用它。它更愿意专注于优化您的算法。

  

程序员浪费了大量时间思考或担心   关于,他们的程序的非关键部分的速度,以及这些   效率的尝试实际上会产生强烈的负面影响   考虑调试和维护。我们应该忘记小事   效率,大约97%的时间说:过早优化是   万恶之源。然而,我们不应该放弃我们的机会   至关重要3%。“

答案 1 :(得分:1)

理论上,将向量创建为局部变量可能要快一点,而不是(例如)将向量指针作为局部变量,并且向量本身动态分配。后者需要额外的间接级别才能获得您真正关心的数据。

实际上,差异几乎总是太小而无法注意或关心。除非你真的需要动态分配它,否则你通常想要创建一个向量作为局部变量,但是避免额外级别间接的微优化可能是最少的原因。 。保持代码简单,易懂和可靠是很多更好的理由。