国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java - C,C++函數調用時入棧順序 是編譯時還是運行時完成的?

瀏覽:101日期:2024-02-06 15:27:57

問題描述

我的理解是靜態編譯時,因為C語言是過程性語言只能靜態聯編不能動態聯編,而C++編譯于此類似,所以是編譯時完全。不知道這樣對不對?

問題解答

回答1:

入棧的順序是編譯時確定的。

函數調用之前需要入棧的主要是函數參數,而參數都是固定的(可變參數只是用宏確定偏移量)。 調用函數的代碼是放在代碼段的,入棧都是以指令方式進行的,所以順序都是編譯時確定的。

回答2:

@lianera 說的不錯,入棧的順序是編譯時確定的。

我這給你看個例子:我有段代碼是這樣的

#include <stdio.h>int test_fun(int a, int b){ return a + b; }int main(int argc, char *argv[]){ int A, B, ret; A = 3; B = 4; ret = test_fun(A, B); return 1;}

編譯后,他的匯編代碼是這樣的

int test_fun(int a, int b){ 400474: 55 push %rbp 400475: 48 89 e5 mov %rsp,%rbp // $edi存的是A的值,$esi存的是B的值,將他們壓入棧中 400478: 89 7d fc mov %edi,-0x4(%rbp) 40047b: 89 75 f8 mov %esi,-0x8(%rbp) return a + b; 40047e: 8b 45 f8 mov -0x8(%rbp),%eax 400481: 8b 55 fc mov -0x4(%rbp),%edx 400484: 8d 04 02 lea (%rdx,%rax,1),%eax}int main(int argc, char *argv[]){ 400489: 55 push %rbp 40048a: 48 89 e5 mov %rsp,%rbp 40048d: 48 83 ec 20 sub $0x20,%rsp 400491: 89 7d ec mov %edi,-0x14(%rbp) 400494: 48 89 75 e0 mov %rsi,-0x20(%rbp) int A, B, ret; // 壓入本地變量A A = 3; 400498: c7 45 f4 03 00 00 00 movl $0x3,-0xc(%rbp) // 壓入本地變量B B = 4; 40049f: c7 45 f8 04 00 00 00 movl $0x4,-0x8(%rbp) ret = test_fun(A, B); 4004a6: 8b 55 f8 mov -0x8(%rbp),%edx 4004a9: 8b 45 f4 mov -0xc(%rbp),%eax // 將A和B的值放入相應的寄存器 4004ac: 89 d6 mov %edx,%esi 4004ae: 89 c7 mov %eax,%edi // 調用test_fun 4004b0: e8 bf ff ff ff callq 400474 <test_fun> 4004b5: 89 45 fc mov %eax,-0x4(%rbp) return 1; 4004b8: b8 01 00 00 00 mov $0x1,%eax}

不懂匯編也沒關系,在編譯過程中,參數的傳遞順序,參數、本地變量等應該放在棧的哪個位置(相對位置)都是定了的。當程序運行到相應程序后會按照編譯好的順序對棧進行操作。

回答3:

入棧這個不是運行時才有的過程嗎?編譯只是翻譯為字節碼的過程,為什么會有入棧?

標簽: java
相關文章:
主站蜘蛛池模板: 国内精品免费一区二区三区 | 日韩激情中文字幕一区二区 | 欧美成人亚洲国产精品 | 看a网址| 91久久精品国产免费一区 | 午夜三级a三级三点在线观看 | 最新怡红院全部视频在线 | 欧美一级纶理片免费 | 亚洲精品一区二区三区在线播放 | 免费一区在线观看 | 国产精品资源在线 | 日韩a级片 | 91久久线看在观草草青青 | 欧美一区二区在线视频 | 国产精品久久久久久一级毛片 | 狠狠色丁香婷婷综合久久片 | 国产一区二区精品久 | 毛片1毛片2毛片3毛片4 | 日韩成人中文字幕 | 日韩亚洲欧美在线 | 在线亚洲v日韩v | 国产在线精品一区二区三区不卡 | 1769视频在线观看国产 | 国产成人亚洲精品影院 | 欧美激情视频在线观看一区二区三区 | 国产黄色片在线免费观看 | 久草在线| 在线中文字日产幕 | 在线观看视频亚洲 | 精品亚洲欧美高清不卡高清 | 亚洲国产高清视频 | 亚洲精品国产成人中文 | 99在线精品视频 | 欧美日韩国产在线人成dvd | 久久国产精品久久国产精品 | 美女视频黄a视频免费全程 美女视频黄a视频免费全过程 | 国产欧美日本在线观看 | 亚洲欧美日韩在线不卡中文 | 99视频在线国产 | 亚洲毛片视频 | 日本黄网站高清色大全 |