Stack 上 開闢一小塊區塊,屬於該函數專屬的記 憶體空間,稱為 Stack frame ◦ 其中會包含 Return address、 Local data 等等 ◦ Stack frame 3 當 Function 執行完後,Frame 會 Stack fram 2 被清除 Stack fram 1 High Address Stack fram 0
開始前的前置作業 ◦ 規劃出所需的 Stack 空間 ◦ 建立新的 Function Context Prologue Epilogue Stack frame 3 Stack frame 3 Stack fram 2 Stack fram 2 Stack fram 1 Stack fram 1 Stack fram 0 Stack fram 0 Function Epilogue ◦ Function 結束後的後置作業 ◦ 把 Stack 還原成執行前的樣子 ◦ 清理自己的 Stack Frame High
// 8 bytes int b = 0x5678; // 4 bytes long long *ptr_a = &a; // 8 bytes int *ptr_b = &b; // 8 bytes } // NOTE: // pointers are same size // x86: 4 bytes // x86_64: 8 bytes int *ptr_b long long *ptr_a int b long long a
// 8 bytes int b = 0x5678; // 4 bytes long long *ptr_a = &a; // 8 bytes int *ptr_b = &b; // 8 bytes int *ptr_b long long *ptr_a int b 引入「地址」的概念 } // NOTE: // pointers are same size // x86: 4 bytes // x86_64: 8 bytes long long a