使用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的棧幀圖