可以指望我的编译器在const char *上优化strlen吗?

可以指望我的编译器在const char *上优化strlen吗?,第1张

概述在我的SAX xml解析回调(XCode 4,LLVM)中,我正在做很多调用 这种类型的代码: static const char* kFoo = "Bar";void SaxCallBack(char* sax_string,.....){ if ( strcmp(sax_string, kFoo, strlen(kFoo) ) == 0) { } 在我的SAX xml解析回调(XCode 4,LLVM)中,我正在做很多调用
这种类型的代码:
static const char* kFoo = "bar";voID SaxCallBack(char* sax_string,.....){     if ( strcmp(sax_string,kFoo,strlen(kFoo) ) == 0)     {     }  }

是否可以安全地假设strlen(kFoo)由编译器优化

(苹果示例代码
已经预先计算了strlen(kFoo),但是我认为这是容易出现大量常量字符串的错误.)

编辑:动机优化:解析我的SVG地图在iPod touch 2G需要5秒(!)使用NSXMLParser.所以,我想切换到lib2xml,并优化字符串比较.

解决方法 如果通过“LLVM”你的意思是俚语,那么是的,你可以指望ang -O来优化strlen.这是你的函数的代码如何:
_SaxCallBack:Leh_func_begin1:    pushq   %rbpLtmp0:    movq    %rsp,%rbpLtmp1:    leaq    L_.str1(%rip),%rsi    movl    ,%edx    callq   _strncmp    ...

我将strcmp更改为strncmp,但是第三个参数确实被立即$3替代.

请注意,gcc 4.2.1 -O3不会优化此strlen调用,并且您只能期望它在您的问题的精确条件下工作(特别是,strlen的字符串和调用必须在同一个文件中).

总结

以上是内存溢出为你收集整理的可以指望我的编译器在const char *上优化strlen吗?全部内容,希望文章能够帮你解决可以指望我的编译器在const char *上优化strlen吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存