我正在查看
函数调用的解集并发现:
movq %rsp,%rbp
pushq %rbx
subq $136,%rsp ; Pad the stack
....
addq $136,%rsp ; Unpad the stack
popq %rbx
popq %rbp
ret
这样做有什么价值?
这是局部变量的空间,而不是填充.
编译器将为运行此函数时必须存储的任何寄存器溢出和局部变量创建该堆栈空间.
你可以看到一些填充,当用SysV ABI反汇编x86-64代码时(大多数不是Windows的东西,我不知道后者是怎么回事),因为函数调用必须让堆栈对齐16个字节.但在这种情况下,它实际上是为局部变量保留空间.
您可能希望查看this或查找有关编译器如何工作的更多信息.