使用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的栈帧图