c代码性能优化
2015-11-15 02:00
155 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ywkuang_09/article/details/49843969
测试的性能是 前者使用了515ms
经验:
1:宏定义展开
2:for循环展开
1:宏定义展开
例如: #define LEN (64*1024*1024)
修改为 #define LEN 0x4000000
原因是避免了替换后的乘法计算
展开前的时间消耗是 624ms
展开后为515ms
时间减少了17%。
2:for循环展开
例如:对数组arr[LEN]中每个元素乘以三。
可能是
for(i=0;i<LEN;i++) { arr[i]*=3; }展开后
for(i=0,j=1;j<LEN;i++,j++) { arr[i]*=3; arr[j]*=3; } if(i==LEN) { arr[i]*=3; }
测试的性能是 前者使用了515ms
后者使用了374ms
消耗时间减少了27%。
参考了 <七个例子帮你更好地理解 CPU 缓存> :点击打开链接
里面第1,2例子测试的结果不一样,可能和使用平台有关,但这里的性能差距还是体现了 “指令级并行”例子。
最后优化后的代码是
#include <stdio.h> #include <stdlib.h> #include <windows.h> #define LEN 0x4000000 //(64*1024*1024) void test1(int step,int size) { int *arr=malloc(sizeof(int)*size); int i,p,j; DWORD s,e,d; DWORD s1,e1,d1; s=GetTickCount(); for(i=0,j=1;j<LEN;i+=2,j+=2) { arr[i]*=3; arr[j]*=3; } if(i<LEN) arr[i]*=3; e=GetTickCount(); d=e-s; printf("%ld\n",d); free(arr); } int main() { int i; //for(i=1;i<=256;i++) test1(i,LEN); return 0; }
相关文章推荐
- Android性能优化篇:从代码角度进行优化
- 性能优化系列第三篇--Java(Android)代码优化
- 35 个 Java 代码性能优化总结
- 现代处理器与代码性能优化
- 35 个 Java 代码性能优化总结
- 性能优化之Java(Android)代码优化
- Java 性能优化:教你提高代码运行的效率
- 性能优化之Java(Android)代码优化
- JavaScript代码性能优化总结
- JavaScript代码性能优化总结
- velocity china 2010:第三方广告代码稳定性与性能优化
- 不改代码就能优化ASP.NET网站性能的方法
- Java 代码性能优化总结
- 35 个 Java 代码性能优化总结
- 35 个 Java 代码性能优化总结 1-10
- PHP代码性能优化的技巧讲解
- C代码性能优化
- Java程序性能优化:代码优化
- [转]Python 代码性能优化技巧
- JavaScript代码性能优化总结 20151101