【发布时间】:2015-06-25 04:25:23
【问题描述】:
我有一个程序,其中涉及对少数函数的大量调用,每个函数都在本地分配固定大小的数组(总共大约几百字节)。假设将所有分配移动到 main 然后传递指针会获得更好的速度是否正确?换句话说,从堆栈指针中减去是否需要线性或恒定时间,如果需要恒定时间,与将指针传递给函数相比,成本是多少?
我做了一个小速度测试。示例 #1 运行得更快一些。
示例 #1
using namespace std;
#include <iostream>
int f(int* a){
// do stuff
return 0;
}
int main(){
int a[1000];
int x;
for (int i = 0; i < 50000; ++i){
x=f(a);
}
return 0;
}
示例 #2
using namespace std;
#include <iostream>
int f(){
int a[1000];
// do stuff...
return 0;
}
int main(){
for (int i = 0; i < 50000; ++i){
x=f();
}
return 0;
}
【问题讨论】:
-
有人能解释一下他想问什么吗?
-
我的意思是,如果你在函数中声明一个固定大小的数组,有时将声明移动到 main 然后将指针传递给函数,这样你就不必继续分配空间了每次通话?或者,在不使用函数时保持堆栈较小会更好
-
也许吧。也许不吧。我们不知道。性能无法猜测,必须通过 profiling 来衡量。但在重要之前,不要担心。就像,完全一样。
-
不,这样假设是不正确的。堆栈空间“分配”通常是单次减法运算。而且您考虑的所有事情都不是“静态的”。
-
一般来说,许多人认为在尽可能窄的范围内定义变量是一种很好的风格(当然,同时避免重新计算相同的值或数据)。所以将数组向外移动到 另一个函数 有点走错路了......
标签: c++ c performance memory-management