gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:33:50 25 4
gpt4 key购买 nike

在我的 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),但我认为这对于大量常量字符串来说容易出错。)

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

最佳答案

如果“LLVM”是指 clang,那么是的,您可以依靠 clang -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 必须在同一个文件中)。

关于我可以指望我的编译器在 const char * 上优化 strlen 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com