在我的代码中,我必须管理一小组数据。例如,我的一些代码可能如下所示:
bool flag0, flag1, flag2, flag3; int val0, val1, val2, val3; flag0 = GetFlag(0); flag1 = GetFlag(1);
//从这里做类似的事情。
大多数时候,我可以轻松切换到小数组实现并使用for循环处理它们:
bool flag[4]; int val[4]; for(int i = 0; i < 4; i++) flag[i] = GetFlag(i);
...
我知道第二种方法产生的代码比第一种方法更易读,但是为了查询...
第一种方法通常会表现更好吗?由于没有循环开销或数组开销,它是否使用更少的内存或更快的运行?
让我们假设代码为了简单起见不使用多线程,也因为我不认为我的程序使用它。
对两者的整体评估?你觉得怎么样?
提前感谢您的回答。
答案 0 :(得分:8)
首先micro-optimzation这样的这个是不相关的,直到你证明它们是相关的。
关于您的具体问题,至少我想到了两种可能的编译器优化:
总而言之,当您拥有更易读和可维护的代码时,请不要避免使用循环。
答案 1 :(得分:1)
您所描述的内容称为&#39;循环展开&#39;。作为代码优化步骤的一部分,编译器会自动为您完成,无需手动完成。
答案 2 :(得分:1)
对于这样的C代码,我认为你写它的方式并不重要。 当使用-O2或-O3标志进行优化时,GCC编译器会做到这一点。使用-O3标志可以为您提供运行速度最快的代码。所以我会记住人类的可读性。 另一件可以帮助的事情是不使用一个变量来做所有事情;如果你声明更多变量,每个变量在程序的一个部分或函数中具有特定用途,它有时会更快。但我相信最重要的是选择的编译器和优化标志。
https://gcc.gnu.org/onlinedocs/gcc/Option-Index.html
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options