g ++程序集生成(变量顺序)

时间:2013-09-06 19:40:22

标签: assembly g++

两个版本的简单C代码:

int main(){

    int array[4];
    int i=0;
    array[4]=0;
}

int main(){
    int i=0;
    int array[4];

    array[4]=0;
}

我用这样的g ++编译:g ++ -x c -S -masm = intel -fverbose-asm -l -c test.c

在BOTH版本中我得到了相同的代码:

_main:
LFB0:
    .cfi_startproc
    push    ebp  #
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    mov ebp, esp     #,
    .cfi_def_cfa_register 5
    and esp, -16     #,
    sub esp, 32  #,
    call    ___main  #
    mov DWORD PTR [esp+28], 0    # i,
    mov DWORD PTR [esp+28], 0    # array,
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE0:

有人可以解释原因吗?我的意思是不应该i和阵列的顺序不同? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

没有为什么。编译器可以根据需要对局部变量进行排序。您声明它们的顺序与任何事情无关。