c - 在循环内或循环外声明变量,有很大区别吗?

标签 c performance variable-declaration

<分区>

例如

int i, a, c, d; // these vars will only be used in while
while(bigNumber--) {
    i = doSomething();
    // **

}

while(bigNumber--) {
   int i, a, b, c; // i'd like to put it here for readability
   i = doSomething();
   // **
}

它在性能方面有很大的不同吗?

最佳答案

是的。在这两种情况下,变量 i 的范围是不同的。

在第一种情况下,我在 block 或函数中声明了一个变量。因此,您可以在 block 或函数中访问它。

在第二种情况下,我在 while 循环中声明了一个变量。因此,您只能在 while 循环中访问它。

Does it make big difference in terms of performance?

,在何处声明它对性能没有影响。

对于示例1:

int main()
{
    int i, bigNumber;

    while(bigNumber--) {
        i = 0;
    }
}

程序集:

main:
  push rbp
  mov rbp, rsp
.L3:
  mov eax, DWORD PTR [rbp-4]
  lea edx, [rax-1]
  mov DWORD PTR [rbp-4], edx
  test eax, eax
  setne al
  test al, al
  je .L2
  mov DWORD PTR [rbp-8], 0
  jmp .L3
.L2:
  mov eax, 0
  pop rbp
  ret

示例 2:

int main()
{
    int bigNumber;

    while(bigNumber--) {
        int i;
        i = 0;
    }
}

程序集:

main:
  push rbp
  mov rbp, rsp
.L3:
  mov eax, DWORD PTR [rbp-4]
  lea edx, [rax-1]
  mov DWORD PTR [rbp-4], edx
  test eax, eax
  setne al
  test al, al
  je .L2
  mov DWORD PTR [rbp-8], 0
  jmp .L3
.L2:
  mov eax, 0
  pop rbp
  ret

两者生成相同的汇编代码。

关于c - 在循环内或循环外声明变量,有很大区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257866/

相关文章:

c - 无法设置 Pthread 优先级

c++ - 'auto' 关键字可以用作 C++11 中的存储类说明符吗?

c - 一种用C删除链表元素的方法

python - 不理解不同算法之间计算复杂度的差异

java - 加特林:脚本执行时出现错误, "could not prepare: Boon failed to parse into a valid AST: -1"

c++ - 与其他跨平台正则表达式库相比,Oniguruma 有多好?

pointers - 如何在 D 中声明一个指向非常量/可变数据的常量指针?

java - 为什么声明整数 Static 会导致我的代码出现错误?

c - 将数组传递给函数时,如果我在该函数中更改数组的值,原始数组的值会改变吗?

c - malloc()'s "完美效率”VS自动变量