我在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
而不是-12
(sizeof long
+ sizeof int
)?