![](https://img.haomeiwen.com/i1648725/f30226f5551b854e.jpg)
![](https://img.haomeiwen.com/i1648725/5db41010f2a830e0.jpg)
![](https://img.haomeiwen.com/i1648725/4543e98f578d090c.jpg)
如果不调用,那么64位系统设置局部变量的时候,将局部参数压入栈,不会像8086一样,修改sp的值,调用的时候直接使用bp-2,-4等操作;
疑惑:有可能-2,-4会不会被别人调用这个空间?
答案是不会的,因为sum()中没有调用比的函数,所以不会的
如果调用了test(),那么sum()会自动的sp-2,向8086看齐,自动分配一个空间,给局部变量使用;这个是编译器的一个优化,非常的好,节省内存空间
![](https://img.haomeiwen.com/i1648725/115544d7d079f56c.jpg)
![](https://img.haomeiwen.com/i1648725/802996dd5cbba93c.png)
![](https://img.haomeiwen.com/i1648725/0a29dedafad82945.png)
栈帧是sp和bp直接的东西,但是64位系统中的参数放到了寄存器中,并且内部没有调用函数,sp=bp,就没有栈帧;
![](https://img.haomeiwen.com/i1648725/c8085425aa593f1c.jpg)
![](https://img.haomeiwen.com/i1648725/3b7f49c951ab8a06.jpg)
![](https://img.haomeiwen.com/i1648725/70d2ff3a913401c8.jpg)
网友评论