把向量放在堆栈上的好处

Benefit of putting vector on stack

本文关键字:堆栈 向量      更新时间:2023-10-16

考虑将vector s放在堆栈而不是堆上是否有任何真正的性能优势,因为在内部vector无论如何都会将东西放在堆上?

即使有也可以忽略不计。然而,您应该记住的一件事是,实际分配的过程对于堆要比堆栈慢。这就是

vector<T> t; 

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

因为在堆栈上分配基本上只是移动堆栈指针。

因此,抛开所有生命周期问题不谈,如果您必须分配大量的向量,则可能会造成较小的性能损失。

然而,如果你有几个向量,那么在我看来,不会有明显的增益。

我应该提到,在过早优化下,担心从堆栈和堆分配中获得的性能收益是失败的。所以只要选择一个更适合你的需求,然后使用它。把重点放在优化你的算法上是值得的。

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

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

在现实中,差异几乎总是远远太小而注意不到或关心。除非您确实需要动态地分配它,否则您通常希望将向量创建为局部变量,但是避免额外的间接级别的微优化可能是这样做的最不重要的原因。保持代码简单、易于理解和可靠是更好的理由。