【发布时间】:2017-11-29 04:23:49
【问题描述】:
例如,如果我有一个循环
for(int i = 0; i < N; i++) {
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
foo(a, b, c, d, e);
}
或
int a, b, c, d, e;
for(int i = 0; i < N; i++) {
cin >> a >> b >> c >> d >> e;
foo(a, b, c, d, e);
}
哪一个应该更快?在第一种情况下,我在 for 循环中定义了五个变量,在第二种情况下,我在外部定义了它。
我看到过诸如 Difference between declaring variables before or in loop? 之类谈论“哪个更快”的帖子,但我不确定哪个占用的内存更少。
我并不真正关心复杂性,而是我的程序中使用的内存量。
显然,在这种情况下,这并不重要,但如果我有一个多维 for 循环并且必须定义数百万次变量怎么办?或者,如果我多次定义一个包含许多元素的大向量怎么办?
如果这个问题真的很简单,我深表歉意,因为我是 C++ 新手。任何帮助将不胜感激。谢谢大家。
【问题讨论】:
-
您在测试上述代码时观察到了什么?你注意到你的程序在这两种情况下都使用了更多的内存吗?
-
我会说这取决于编译器如何处理它,但如果没有优化,第二种方式可能会更好。
-
在第一个代码 sn-p 中,您将在每次循环迭代中在堆栈上分配五个整数,然后在最后弹出它们——这需要稍长一些。但就@SpencerWieczorek 而言,现实世界中的优化器会为您处理这个问题。
-
@bobjoe628 第一种方法并没有真正使用更多的内存,它只是有一个不必要的步骤来提高每次迭代中删除和添加这些变量的性能。 (假设编译器没有处理它)
-
@bobjoe628 怎么样?最重要的答案是在这里说的基本相同,编译器无论如何都会处理它。
标签: c++ performance variables memory-management initialization