在我的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的字符串和调用必须在同一个文件中).