1
我不明白为什么GCC甚至ESP触及%,此代码:它是一个堆栈框架吗?
int foo(char *);
int bar(char** a)
{
if (!a[1]) {
return 1;
}
if (foo(a[1]) == -1) {
return 1;
}
return 0;
}
与-O2
产生:
bar:
.LFB0:
.cfi_startproc
movq 8(%rdi), %rdi
movl $1, %eax
testq %rdi, %rdi
je .L7
subq $8, %rsp
.cfi_def_cfa_offset 16
call foo
cmpl $-1, %eax
sete %al
addq $8, %rsp
.cfi_def_cfa_offset 8
movzbl %al, %eax
.L7:
rep ret
而且铛做一些事情,甚至疯狂的开始和后来推%rax
将其弹入%rdx
。
它是分配一个堆栈帧吗?这与这些.cfi
指令有关吗?
这是为了对齐 – harold