写点什么

C 语言性能优化:移除循环体中的重复运算

用户头像
一笑置之
关注
发布于: 2021 年 03 月 22 日
C语言性能优化:移除循环体中的重复运算

在循环体或者循环条件检查中运算结果始终不变的运算,只需要在循环之前运算一次即可,不需要每次都重复运算。比如,如下代码中的 strlen(),在 for()循环中每次循环条件检查时,都会重新计算一次长度,因为长度是不变的,所以多次重复计算长度是不必要的,浪费了 CPU 性能。


extern int strlen(char *p);
void f(char* p) { int i; int x=0; for (i = 1; i <= strlen(p); i++) { x += i*2; }}
复制代码

对应的汇编代码如下:



修改的方法就是,将 strlen()移出 for()循环,放在循环之前执行一次即可。


extern int strlen(char *p);
void f(char* p) { int len = strlen(p); int i; int x=0; for (i = 1; i <= len; i++) { x += i*2; }}
复制代码

对应的汇编代码如下:


用户头像

一笑置之

关注

还未添加个人签名 2019.08.10 加入

还未添加个人简介

评论

发布
暂无评论
C语言性能优化:移除循环体中的重复运算