十八. 函数的栈帧

使用64位系统执行这个函数
反汇编看看他的内部
//test调用或者不调用

如果不调用,那么64位系统设置局部变量的时候,将局部参数压入栈,不会像8086一样,修改sp的值,调用的时候直接使用bp-2,-4等操作;
疑惑:有可能-2,-4会不会被别人调用这个空间?
答案是不会的,因为sum()中没有调用比的函数,所以不会的

如果调用了test(),那么sum()会自动的sp-2,向8086看齐,自动分配一个空间,给局部变量使用;这个是编译器的一个优化,非常的好,节省内存空间


sp的站平衡使用的是内或者外平栈
经典的8086函数中调用其他函数,如果还有另一个函数,接着往上走
8086的栈祯

栈帧是sp和bp直接的东西,但是64位系统中的参数放到了寄存器中,并且内部没有调用函数,sp=bp,就没有栈帧;

test不调用其他的函数示意图
栈帧
test销毁了,sum的栈帧图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容