把向量放在堆栈上的好处
Benefit of putting vector on stack
考虑将vector
s放在堆栈而不是堆上是否有任何真正的性能优势,因为在内部vector
无论如何都会将东西放在堆上?
即使有也可以忽略不计。然而,您应该记住的一件事是,实际分配的过程对于堆要比堆栈慢。这就是
vector<T> t;
比
快vector<T>* t = new vector<T>;
因为在堆栈上分配基本上只是移动堆栈指针。
因此,抛开所有生命周期问题不谈,如果您必须分配大量的向量,则可能会造成较小的性能损失。然而,如果你有几个向量,那么在我看来,不会有明显的增益。
我应该提到,在过早优化下,担心从堆栈和堆分配中获得的性能收益是失败的。所以只要选择一个更适合你的需求,然后使用它。把重点放在优化你的算法上是值得的。
程序员浪费了大量的时间去思考或担心他们的程序的非关键部分的速度,以及这些追求效率的努力实际上会产生强烈的负面影响考虑了调试和维护。我们应该忘记小效率,比如说97%的时候:过早的优化是万恶之源。然而,我们不应放弃在这方面的机会关键的3%。"
理论上,将vector创建为局部变量可能比(例如)使用指向vector的指针作为局部变量并动态分配vector本身要快一点点。后者需要额外的间接级别才能获得您真正关心的数据。
在现实中,差异几乎总是远远太小而注意不到或关心。除非您确实需要动态地分配它,否则您通常希望将向量创建为局部变量,但是避免额外的间接级别的微优化可能是这样做的最不重要的原因。保持代码简单、易于理解和可靠是更好的理由。相关文章:
- 对象接收堆栈溢出异常 c++ 的排序向量
- 对象向量是否在堆或堆栈上分配C++?
- 在C++中使用队列和堆栈对 2 个向量进行加减
- 是否可以在堆栈上创建向量
- 堆栈在函数中弹出仍然显示在主函数中。调用不应该通过引用给定的向量吗
- 附加到具有非动态分配堆栈的向量
- 如何正确打印堆栈的向量
- 从分配在堆栈上的对象指针的向量中删除元素
- 链表与动态数组用于使用向量类实现堆栈
- 向量的向量,堆与堆栈(C++)
- 制作数组堆栈和向量的二维数组
- 将向量从堆栈复制到堆上
- 堆栈分配的向量如何在 C++ 中扩展
- 存储在对象向量上的基于堆栈的指针具有很长的使用寿命
- C++向量的堆栈分配
- 在C++中,是在堆栈或堆上的函数中创建的向量或映射
- 为什么存储在 STL 向量中的堆栈分配元素C++即使超出范围也仍然处于活动状态
- 我怎样才能实现堆栈的向量
- 为什么这不会导致堆栈溢出?其中是存储的全局向量(堆栈或堆)
- 堆栈上有成员的向量