x0,%eax
: 转
: 没有
: 没有
转储结束。
可见-fomit-frame-可以去掉STP。
删除 STP 有哪些缺点?
1)增加调优难度
由于调试器指令中使用了STP,因此没有STP 就无法使用调试指令。
2)降低汇编代码的可读性
访问函数参数和局部变量,没有ebp,只能通过+xx(esp)来访问,两种方式很难区分,降低了程序的可读性。
取消STP有什么好处?
1)节省堆栈空间。
2) 减少了建立和销毁栈帧的指令,简化了代码。
3)释放ebp,将其用作通用寄存器,以增加通用寄存器的数量。
4)以上3点使得程序运行速度更快。
概念六:调用约定和ABI(应用程序二进制接口)。
函数如何找到它的参数?
函数如何返回结果?
函数在哪里存储局部变量?
哪个硬件寄存器是起始空间?
哪些硬件寄存器必须提前保留?
调用约定解决了上述问题。 也是 ABI 的一部分。 因此,遵守相同ABI规范的操作系统使得二进制代码之间的互操作成为可能。
例如:由于Linux和Linux都遵守V的ABI,10提供了直接运行Linux二进制程序的功能。
c语言函数总结
本文通过最简单的C程序介绍以下概念:
STP堆栈帧指针
堆栈堆栈对齐
调用约定和ABI(应用程序二进制接口)
看过《C语言函数调用流程》的人还看过:
1.什么是C语言程序中的函数?
2.C语言中get函数的用法
3.C语言中if函数的用法
4.c语言的使用
5、2015年9月计算机二级C语言高分突破模拟试卷总结