是否有任何真正的性能优势,担心将vector
放在堆栈而不是堆上,因为内部vector
会将内容放在堆上?
答案 0 :(得分:3)
如果有的话可以忽略不计。但是,您应该记住的一件事是,堆的实际分配进程比堆慢。 那是
vector<T> t;
比
快vector<T>* t = new vector<T>;
由于在堆栈上分配基本上只涉及移动堆栈指针。
所有的生活时间问题除外,如果你必须分配很多载体,你可能会在这个小的性能损失上积累。
但是,如果您有少数载体,那么在我看来,没有明显的收益。
我应该提一下,担心堆栈和堆分配带来的性能提升会在premature optimization下失败。因此,只需选择哪种更适合您的需求并使用它。它更愿意专注于优化您的算法。
程序员浪费了大量时间思考或担心 关于,他们的程序的非关键部分的速度,以及这些 效率的尝试实际上会产生强烈的负面影响 考虑调试和维护。我们应该忘记小事 效率,大约97%的时间说:过早优化是 万恶之源。然而,我们不应该放弃我们的机会 至关重要3%。“
答案 1 :(得分:1)
理论上,将向量创建为局部变量可能要快一点,而不是(例如)将向量指针作为局部变量,并且向量本身动态分配。后者需要额外的间接级别才能获得您真正关心的数据。
实际上,差异几乎总是远太小而无法注意或关心。除非你真的需要动态分配它,否则你通常想要创建一个向量作为局部变量,但是避免额外级别间接的微优化可能是最少的原因。 。保持代码简单,易懂和可靠是很多更好的理由。