c - 为什么静态变量不执行 ‘add’指令?

标签 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指令但我看到‘add’指令被执行为 i=i+1 ;

这是为什么?

--- 编辑 ---

澄清一下:

我一步一步调试,如下所示,我的问题是为什么我看到 This i=i+1;由 not 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];

最佳答案

这似乎是编译器的优化,因为从未使用过 c 变量并且 c 是静态的,因此它不存在于最终程序中。

尝试

return c;
你会看到
c= c+A[i];
在 gdb 中

或尝试更改

int static A
至至
int A
它也会起作用

关于c - 为什么静态变量不执行 ‘add’指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549999/

相关文章:

c - 如何将数组作为参数传递给 vararg 函数?

assembly - 为什么6502单片机没有算术右移?

assembly - 我的程序集冒泡排序有什么问题?

c - 在 C 函数中修改数组

c - 更新到 GLIBC_2.29 时缺少 libcap.so.2

c - 在函数中递增案例编号?

c - lib 依赖项及其顺序

c - ARM 检测中断何时占用过多 CPU 时间

assembly - 添加彩色文本(我的自定义 MBR)

assembly - 更改 CS :IP in Assembly Language