此问题在此处已有答案:
Compiler using local variables without adjusting RSP(1个答案)
What C/C++ compiler can use push pop instructions for creating local variables, instead of just increasing esp once?(2个答案)
4天前关闭。
下面是一个基本函数调用的基本C代码:
int multiply(int num, int k) {
return num * k;
}
int main(int argc, char** argv) {
int k = multiply(5,2);
}
当我尝试使用www.example.com上提供的工具反汇编此代码godbolt.org并选择 x86-64 clang 10.0.1 选项时,得到了以下汇编指令:
第一次
然而,堆栈指针似乎并不随着每次(甚至在被调用者将参数从寄存器edi
和esi
添加到堆栈之后)而改变,并且仍然指向包含基指针寄存器的旧值的位置。为什么会发生这种情况?
1条答案
按热度按时间km0tfn4u1#
编译器会规划函式所需的所有空间,并在函式开头和结尾各调整一次堆栈指标,而不是每次在函式内的堆栈上需要某些东西时都调整。