当前位置: 首页 > 科技观察

如何分析和提高(C-C++)程序编译速度?

时间:2023-03-23 01:33:37 科技观察

当我们遇到这样的情况,是不是不知所措?如何防止出现这种情况,我们来分析一下程序加速的一些方法。硬件和编译器导致的更好的电脑无疑是操作的最佳选择。其次,还可以优化编译器选项。比如在VS环境下,可以通过配置属性来实现。具体步骤如下。可以参考:https://blog.csdn.net/yizhou2010/article/details/52635288代码编写风格多采用自增、自减指令和复合赋值表达式。你认为使用i++,i=i+1,i+=1有什么不同吗?下面测试一下C代码:voidasd(){}intmain(){inti=0;i++;asd();  //方便区分上下文ii=i+1;asd();i+=1;返回0;}反汇编:mov[rbp+i],0    //初始化iadd[rbp+i],1    //i++;call_Z3asdv;asd(void)add[rbp+i],1    //ii=i+1;call_Z3asdv;asd(void)add[rbp+i],1    //i+=1;我们看到结果是一样的,但是在一个更复杂的表达式中会生成更多的指令,使用i+=1的总是比写i=i+1的稍微好一些。将除法替换为乘法或移位表示除法是乘法过程的逆过程,依次减去(如果x足够)y^(2^31),y^(2^30),...y^8,y^4,y^2,y^1。减去y对应的数,再将对应的数加到结果中。一般来说,需要更多的时间。使用demo测试autotime_start=std::chrono::system_clock::now();intiCount=100000;doublek;for(inti=0;i<1000000;i++){tmp=iCount/2;}std::chrono::durationtime_spend=std::chrono::system_clock::now()-time_start;doubletest1=time_spend.count()*1000;cout<<"test1cost"<>1;}time_spend=std::chrono::system_clock::now()-time_start;test3=time_spend.count()*1000;cout<<"test3cost"<<时间成本<<"毫秒"<