其他分享
首页 > 其他分享> > 测试一下GCC编译器的优化性能

测试一下GCC编译器的优化性能

作者:互联网

 

第一次编写的测试代码,测试代码,函数直接传值,内部也在拷贝值

 1 struct PP{
 2         float x;
 3         float y;
 4         float z;
 5 };
 6 
 7 PP lots_of_copies(PP a, PP b){
 8         PP c;
 9         c = b;
10         b = a;
11         return c;
12 }
13 void lots_of_copies_2(PP a, PP b, PP& c){
14         c = b;
15         b = a;
16 }
17 void test_func1()
18 {
19         PP a{1.01, 1.75, 2.45};
20         PP b{1.21, 1.95, 4.25};
21         PP c;
22         for(int i = 0; i < 10000000; i++){
24                 c = lots_of_copies(a, b);
25         }
26 }
27 
28 int main()
29 {
30         test_func1();
31         return 0;
32 }

不优化编译执行耗时60毫秒,O1优化编译以后耗时直接降低到2毫秒。30倍以上的性能提升。

第二次代码稍微改变一下

 1 struct PP{
 2         float x;
 3         float y;
 4         float z;
 5 };
 6 
 7 PP lots_of_copies(PP a, PP b){
 8         PP c;
 9         c = b;
10         b = a;
11         return c;
12 }
13 void lots_of_copies_2(PP a, PP b, PP& c){
14         c = b;
15         b = a;
16 }
17 void test_func1()
18 {
19         PP a{1.01, 1.75, 2.45};
20         PP b{1.21, 1.95, 4.25};
21         PP c;
22         for(int i = 0; i < 10000000; i++){
23                 //c = lots_of_copies(a, b);
24                 lots_of_copies_2(a, b, c);
25         }
26 }
27 
28 int main()
29 {
30         test_func1();
31         return 0;
32 }

 

 代码优化主要把函数的返回传值去掉,改为走引用传递,发现不优化的清空下性能提升到46毫秒,有提升,但是差别不大,带优化编译以后的效果是一样的。

所以编译器还在其他地方做了更大的优化,来提升性能

暂时还没想明白,记录后续想明白了再记录下来

 

标签:GCC,func1,PP,lots,float,copies,编译器,测试,return
来源: https://www.cnblogs.com/doudou1024/p/15705591.html