Movq有奇怪的偏移

时间:2013-12-13 22:59:51

标签: c assembly alignment x86-64

我在c中有两个例子:

int main () {
    long i = 1;
}

int main () {
    int j = 1;
    long i = 1;
}

以下是两者的asm代码:

_main:                                  ## @main
        pushq   %rbp
        movq    %rsp, %rbp
        movl    $0, %eax
        movq    $1, -8(%rbp)
        popq    %rbp
        ret




_main:                                  ## @main
    pushq   %rbp
    movq    %rsp, %rbp
    movl    $0, %eax
    movl    $1, -4(%rbp)
    movq    $1, -16(%rbp)
    popq    %rbp
    ret

第一个示例中long的偏移量为-8,但是在第二个-16中。为什么我会收到-16而不是-12sizeof long + sizeof int)?

0 个答案:

没有答案