为什么不对静态变量执行'add'指令?

时间:2013-08-31 16:01:23

标签: c assembly

这是一个程序集/ c问题。

我有这个简单的C程序:

main ()
{
  register int i = 0;
  register int c = 0;
  static int A[5]= {1,2,3,4,5}; 

  Loop: c=c+A[i];
  i=i+1;
  if (i!=5) goto Loop;
}  

首先我编译这个程序并使用gdbtui运行调试,然后使用display / I $ pc来跟踪详细信息。我看到为c=c+A[i];执行了add指令但是我看到i=i+1执行了'add'指令;

为什么?

---编辑---

澄清:

我按照下面的步骤逐步调试,我的问题是为什么我看到这个i = i + 1;由c = c + A [i];。

执行
Breakpoint 1, main() at loop.c:3
register int i = 0;
(gdb) step
i=i+1;
(gdb) step
if (i!=5) goto Loop;
(gdb) step
i=i+1;
(gdb) step
if (i!=5) goto Loop;

我在这里期待的是:

(gdb)步骤

C = C + A [I];

1 个答案:

答案 0 :(得分:1)

它似乎是编译器的优化,因为从未使用过c varibale而c是静态的,它在最终程序中不存在。

尝试

return c;
,您会在gdb

中看到

c= c+A[i];

或尝试将

int static A
更改为
int A
,它也会有效