【发布时间】:2022-01-23 00:08:35
【问题描述】:
我需要在循环中使用数组,循环时间非常巨大。
案例1:在for循环外定义数组并传递给fun2
void fun1(){
int temp[16];
for(int i = 0;i <times; i++)
{
fun2(temp);
}
}
void fun2(int[]& temp){
/** do something with temp*/
}
案例2:在fun2中定义数组:
void fun1() {
for (int i = 0; i < times; i++)
{
fun2();
}
}
void fun2() {
int temp[16];
/** do something with temp */
}
fun1 会经常被调用。在这种情况下,哪个更好?
案例 2 对性能有影响吗?
【问题讨论】:
-
检查生成的汇编代码。虽然我怀疑将它作为参数传递给函数会更有效
-
我认为这两个版本在发布模式下都不会显着改变性能。如果有什么我希望在打开优化而不使用调试模式时,案例 #1 会稍微慢一些。
-
如果它真的很重要,不要猜测,测量它。如果不是,那你就是在浪费时间,从功能的角度选择更有意义的一个,然后继续。
-
现在我上面的评论与
int temp[16];有关。如果您有myClass temp[16];,我的答案会有所不同,两个代码版本的行为也会有所不同。 -
为多种目的重用变量是一种非常可靠的引入错误的方法。声明尽可能接近使用,重新考虑它是否是性能问题。 (这可能会让您感到惊讶,但第一个版本实际上比第二个版本做得更多。)