【发布时间】:2018-02-11 21:22:50
【问题描述】:
我正在将下面的 sn-p 编译成程序集
void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
}
void main() {
function(1,2,3);
}
这是function的程序集sn-p
function:
pushq %rbp
movq %rsp, %rbp
subq $48, %rsp ; why is 48 being subtracted from the stack pointer?
movl %edi, -36(%rbp)
movl %esi, -40(%rbp)
movl %edx, -44(%rbp)
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
我在 64 位机器上运行它,所以我认为三个 8 字节字足以容纳 buffer1 和 buffer2。
【问题讨论】:
-
对齐可能是个问题。
-
What is the direction of stack growth in most modern systems? 和 Why do stacks typically grow downwards? 的可能重复项,请参阅 What is x86_64 red zone。您应该重新考虑接受以下答案。我认为它可以改进,通过标记为已接受,您表示您不想要更多[可能更好]的答案。
-
以上 jww 假设您的问题是“为什么向下,而不是向上?”另一个问题可能是“为什么要改变,而不是保持不变?”您谈论大小的事实指向另一个但不清楚的问题。请解释你的问题是什么。也许通过描述你所期待的替代方案。