声明静态变量性能

时间:2021-07-06 15:34:39

标签: c linux performance gcc static

在 C Linux 中,我可以将变量声明为静态变量,并且它只初始化一次,每次 CPU 再次看到该声明时,它将被跳过,或全局声明

女巫其中一个功能会有更好的性能吗?

void increase_x()
{
    static int x =0;
    x+=1;
}


static int x = 0 ;
void increase_x()
{
    x+=1;
}

2 个答案:

答案 0 :(得分:2)

没有区别。您甚至可以在编译代码的反汇编差异中看到这一点:

< localstatic:     file format elf64-x86-64
---
> globalstatic:     file format elf64-x86-64
107c107
<     1131:     8b 05 dd 2e 00 00       mov    0x2edd(%rip),%eax        # 4014 <x.0>
---
>     1131:     8b 05 dd 2e 00 00       mov    0x2edd(%rip),%eax        # 4014 <x>
109c109
<     113a:     89 05 d4 2e 00 00       mov    %eax,0x2ed4(%rip)        # 4014 <x.0>
---
>     113a:     89 05 d4 2e 00 00       mov    %eax,0x2ed4(%rip)        # 4014 <x>

答案 1 :(得分:1)

两个版本的运行时性能应该相同。

但是,在第一个代码段中,x 仅在 increase_x 的主体内可见 - 程序的其余部分无法使用其值。

您可以更改 increase_x 以返回 x 的新值:

int increase_x()
{
  static int x = 0;
  return x += 1;
}

不过,这取决于您打算如何使用 x 的值。