我有一个程序涉及对少数函数的大量调用,每个函数在本地分配固定大小的数组(总共大约几百个字节)。假设将所有分配移动到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;
}
答案 0 :(得分:5)
你似乎理解本地空间的分配是昂贵的,而事实上它并不是(它只是来自堆栈指针的减法)。
考虑到你可能用指针反向引用&#34;半全局&#34; main()
中的局部变量,我看不出你提出的任何实际价值,尽管我们当然有可能提出一个证明我错误的特殊例子。
一般来说,尝试在编码的早期阶段进行优化是一个坏主意。特别是如果你交易简单,易于阅读/理解(可疑)效率。
尝试编写尽可能简单明了的代码。如果有必要,可以在以后阶段进行优化,而不是在您明确发现瓶颈之前进行优化(这并不容易)。
答案 1 :(得分:0)
两者的编写方式没有区别。
在某些系统上,堆栈上的大量分配可能会导致问题,但[1000]是一个相对较小的数组,您永远不会分配多个。
考虑f()是递归函数的情况。然后就可以进行大量的重复分配。