-3

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

4

2 回答 2

3

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

vector<T> t; 

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

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

因此,除了所有生命周期问题之外,如果您必须分配大量向量,您可能会在很小的性能损失上建立起来。

但是,如果您的向量很少,那么我认为不会有显着的收益。

我应该提一下,担心堆栈和堆分配带来的性能提升在过早优化下会失败。因此,只需选择更适合您需求的并使用它。专注于优化算法会有所回报。

程序员浪费大量时间来思考或担心程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。然而,我们不应该放弃那关键的 3% 的机会。”

于 2013-05-01T18:39:35.623 回答
1

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

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

于 2013-05-01T18:39:10.790 回答