C++ 静态本地vs本地。C和C+中哪个更快+;?

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

在多个线程中执行并重新植入func。 将局部变量a和len更改为静态局部变量如何? 每次输入时,func都会执行strlen。 在这种逻辑中,Strlen足以执行一次。 不过,我从相关帖子中知道局部变量的速度更快

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