gpt4 book ai didi

c++ - strlen 是否针对字符串文字进行了优化?

转载 作者:行者123 更新时间:2023-12-01 22:40:55 24 4
gpt4 key购买 nike

所以说我有这个:

const auto foo = "lorem ipsum"

如果我在代码中使用 strlen(foo),11 是在运行时找到的还是在编译时注入(inject)的?

最佳答案

答案取决于编译器和当前的优化级别。

使用此 C++ 代码进行快速实验

#include <cstring>
int strlen_of_const() {
return strlen("lorem ipsum");
}

关于 compiler explorer据透露,一些编译器会优化调用,而其他编译器会在运行时进行调用。例如,gcc 优化了调用:

strlen_of_const():
mov eax, 11
ret

另一方面,MSVC 保留通话:

$SG3533 DB        'lorem ipsum', 00H
EXTRN strlen:PROC
strlen_of_const PROC
sub rsp, 40 ; 00000028H
lea rcx, OFFSET FLAT:$SG3533
call strlen
add rsp, 40 ; 00000028H
ret 0
strlen_of_const ENDP

关于c++ - strlen 是否针对字符串文字进行了优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50237841/

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