Jul*_*ius 9 c gcc clang compiler-optimization c11
我有一个简单的函数,它计算字符串中的字母t:
#include <stdio.h>
#include <string.h>
static int count_t_letters(const char *t) {
int r;
r = 0;
while(*t) {
if(*t == 't') {
++r;
}
++t;
}
return r;
}
int main() {
printf("%i", count_t_letters("test"));
}
Run Code Online (Sandbox Code Playgroud)
这是我期待的优化:
int main() {
printf("%i", 2);
}
Run Code Online (Sandbox Code Playgroud)
为什么这个简单的功能没有像我在gcc和clang中预期的那样优化?(godbolt)
到目前为止我想到了什么:
小智 1
因为您通过修改指针来产生副作用。
如果t您不简单地使用普通索引 int 并增加它,而不是递增,那么 gcc 可以按照您的意愿对其进行优化。
修改指针有副作用。
另一种方法是,简单地复制指针并修改该副本。它再次优化。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |