C++ 静态本地vs本地。C和C+中哪个更快+;?
在多个线程中执行并重新植入func。 将局部变量a和len更改为静态局部变量如何? 每次输入时,func都会执行strlen。 在这种逻辑中,Strlen足以执行一次。 不过,我从相关帖子中知道局部变量的速度更快C++ 静态本地vs本地。C和C+中哪个更快+;?,c++,c,C++,C,在多个线程中执行并重新植入func。 将局部变量a和len更改为静态局部变量如何? 每次输入时,func都会执行strlen。 在这种逻辑中,Strlen足以执行一次。 不过,我从相关帖子中知道局部变量的速度更快 void func() { char *a = "asddf......": int len = strlen(a); } 你太担心小细节了 例如,MSVC 2017编译器将此 #include <string.h> int main() { char *a
void func() {
char *a = "asddf......":
int len = strlen(a);
}
你太担心小细节了
例如,MSVC 2017编译器将此
#include <string.h>
int main() {
char *a = "asddf......";
auto len = strlen(a);
return (int) len;
}
因此,字符串文本的
strlen
是一个编译时常量,即使首先分配给指针。您可以在编译时使用sizeof
获得字符串文本的长度<代码>常量字符str[]=“你好,世界!”;constexpr auto str_len=sizeof(str)-1代码>。如果它们是静态的,则需要使用互斥锁锁定它们,使它们非常慢。如果这对你来说很重要,那么根据你的具体用例,对这两种情况都进行基准测试。你可以使用一个分析器,自己决定哪一种更快。静态局部变量非常昂贵。他们有一个线程安全的初始化保证,因为C++11,这不是免费的。这个片段没有暗示他是你真正受益的,因为它是只读的,文字没有共享问题。C人和酒吧里的C++人战斗。不要因为提到两种语言而引起争吵。
00007FF60D331000 mov eax,0Bh
00007FF60D331005 ret