此:
int something(num){
int arr[] = {1,3,5,7};
//check if num is in arr... If yes, return num, otherwise return 0.
}
int main(){
something(5);
return 0;
}
Vs以上。
int something(num, &parr){
//check if num is in parr... If yes, return num, otherwise return 0.
}
int main(){
int arr[] = {1, 3, 5, 7};
something(5, arr);
return 0;
}
为什么?我会选择相信第二个是最有效的,因为只会发生一次数组初始化,而在代码1中,每次调用something()
时都会发生数组初始化;并且不进行初始化需要时间来执行?
答案 0 :(得分:1)
在速度测试选项A与选项B中,答案是,"很难说。"你必须剖析并找出答案。智能编译器可能会注意到arr
永远不会更改,并且永远不会被修改并相应地进行优化。
但是...
arr
应该尽可能地保持用于提高可读性的位置,因此这是选项A的一个点。另外,将arr
声明为static
变量会消除完全重新初始化问题。
int something(int num){
const static int arr[] = {1,3,5,7}; // const so it is harder to accidentally change
//check if num is in arr... If yes, return num, otherwise return 0.
}
作为static
,arr
只被初始化一次,并且一直持续到程序结束(在资源受限的环境中可能是它自己的问题)。