int main(int argc char *argv[]) { int a = 0 b c d[4096] e; e = d[4095]; b = a; c = a; printf("a:%d b:%d c:%d e:%d\n" a b c e); return 0; }
用“arm-linux-gnueabihf-gcc-O2”优化编译,反汇编结果是:
int main(int argc char *argv[]) { 831c: b530 push {r4 r5 lr} 831e: f5ad 4d80 sub.w sp sp #16384 ; 0x4000 8322: b083 sub sp #12 8324: 2100 movs r1 #0 8326: f50d 4580 add.w r5 sp #16384 ; 0x4000 832a: f248 4018 movw r0 #33816 ; 0x8418 832e: 3504 adds r5 #4 8330: 460a mov r2 r1 -> b= a; 8332: 460b mov r3 r1 -> c= a; 8334: f2c0 0000 movt r0 #0 8338: 682c ldr r4 [r5 #0] 833a: 9400 str r4 [sp #0] -> e = d[4095]; 833c: f7ff efd4 blx 82e8 <_init+0x20> }
你的代码应该编译不过的,有语法错误吧?就是示例代码也需要稍微注意一下语法吧。
此外你的问题应该是编译器自动优化的问题吧。