相关疑难解决方法(0)

为什么现在"{static const char a [] = {...}"和"{const char a [] = {...}"之间存在差异?

看一下godbolt 上这个C代码C++代码的小片段......

void b( char const *c);

void a(void)
{
   char const z[] = {0xd, 0xe, 0xa, 0xd, 0xb, 0xe, 0xe, 0xf, 0xa};

   b(z);
}

void c(void)
{
   static char const z[] = {0xd, 0xe, 0xa, 0xd, 0xb, 0xe, 0xe, 0xf, 0xa};

   b(z);
}
Run Code Online (Sandbox Code Playgroud)

早期版本的gcc将a()和c()编译为两条指令,加载z的地址,跳转到b.

所有现代编译器我都试图"悲观化"a()以"制作堆栈帧,将z复制到堆栈,调用b,拆除堆栈帧,但将c()作为两个指令简单版本.

实际上没有任何改变,在实践中现代编译器现在对这个用例来说更慢.....

有谁知道为什么?

c c++

27
推荐指数
1
解决办法
550
查看次数

标签 统计

c ×1

c++ ×1