【发布时间】:2013-10-29 11:20:34
【问题描述】:
我有一个函数:
void func(int a)
{
int x = a+2;
}
在汇编代码中,在函数prolog中:
push %ebp
mov %esp, %ebp
sub $0x10, %esp
代码只需要为 x 预留空间,即 4 个字节。但它保留了 16 个字节。这是为什么 ?我一直认为它会预留比所需更多的空间。
我的猜测:它倾向于以 16 个字节存储。也就是说,如果我需要说 20 个字节,无论如何它都会保留 32 个字节。
【问题讨论】:
-
看来我的猜测是错误的,因为在这个链接中,这个人只需要 16 字节空间,但保留了 32 字节。 stackoverflow.com/questions/13430540/…
-
对不起,为了简单,我没有多加1行,原来的代码在“sub”行之前多了1行:和0xfffffff0, %esp所以在分配空间之前就完成了对齐.
-
您不仅需要对齐一次,还需要保持对齐。也就是说,一旦您确保它是对齐的,只需对其进行调整以使其保持对齐。因此额外的空间。
-
对 - 如果你对齐它,然后只添加四个字节,你只是再次将它抛出不对齐。