"在x86-64時代,暫存器數量多了,gcc就可以利用多達6個暫存器來儲存引數,多於6個的引數,依然還是通過入棧實現。了解這些對我們寫**很有幫助,起碼有兩點啟示:
盡量使用6個以下的引數列表,不要讓gcc為難啊。
傳遞大物件,盡量使用指標或者引用,鑑於暫存器只有64位,而且只能儲存整形數值,暫存器存不下大物件 "
參考**:
long setbbb(int a, int b, int c, int d, int e, int f, int g, int h)
對應的彙編為:
mov %edi,-0x4(%rbp)
mov %esi,-0x8(%rbp)
mov %edx,-0xc(%rbp)
mov %ecx,-0x10(%rbp)
mov %r8d,-0x14(%rbp)
mov %r9d,-0x18(%rbp)
movl $0x1,-0x4(%rbp)
movl $0x2,-0x8(%rbp)
movl $0x3,-0xc(%rbp)
movl $0x4,-0x10(%rbp)
movl $0x5,-0x14(%rbp)
movl $0x6,-0x18(%rbp)
movl $0x7,0x10(%rbp)
movl $0x8,0x18(%rbp)
頭6行對應取六個引數, 跟參考**中那6個暫存器是一致的
接著6行就是賦值, 最後兩行也是賦值, 賦到棧的引數區
也就是說, 前6個引數是用暫存器傳遞的, 後兩個引數是用棧傳遞的
感謝茅草屋的強力輸出,參考**:
x86-64暫存器和棧幀
暫存器 記憶體 儲存器
暫存器 又稱快取 一般是指由基本的rs 觸發器結構衍生出來的 d觸發,就是一些與非門構成的結構,一般整合在 cpu內,其讀寫速度跟 cpu的執行速度基本匹配,但因為效能優越,所以造價昂貴,一般好的 cpu也就只有幾mb的 2級快取,1級快取更小。使用暫存器可以縮短至零長度 節省儲存空間,提高指令的執...
arm 暫存器 函式 引數
1.暫存器使用說明 arm處理器中r0 r15共16個暫存器,它們的用途是一些約定的習慣!並依據這些用途定義了別名。如圖 暫存器的使用情況如下 1 子程式間通過暫存器r0 r3來傳遞引數,這時可以使用它們的別名a0 a3,被呼叫的子程式返回前無須重複r0 r3的內容。2 在子程式中,使用r4 r11...
儲存 暫存器和記憶體
計算機儲存塔狀結構,暫存器最快,記憶體其次,最慢的是硬碟 同樣是電晶體儲存裝置,為什麼暫存器比記憶體快?一 距離不同 距離不是主要因素,但是最好理解,記憶體離cpu比較遠,所以要耗費更長時間讀取。以3ghz的cpu為例,電流每秒鐘 可以振盪30億次,每次耗時大約為0.33納秒。光在1納秒的時間內,可...