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

前端之家收集整理的这篇文章主要介绍了可以指望我的编译器在const char *上优化strlen吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的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   %rbp
Ltmp0:
    movq    %rsp,%rbp
Ltmp1:
    leaq    L_.str1(%rip),%rsi
    movl    $3,%edx
    callq   _strncmp
    ...

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

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

猜你在找的C&C++相关文章