導航:首頁 > 源碼編譯 > 編譯器幹了啥事兒

編譯器幹了啥事兒

發布時間:2022-09-01 20:26:35

『壹』 C++中編譯時遇到函數的定義,編譯器做了哪些事,

我個人的見解是這樣的,數組因為在定義的時候確定了數組的大小所以編譯器才可以為其分配內存。函數名和數組名就是內存的首地址,所以函數名是代表的入口地址,當你主程序真正調用的這個函數時候,才會為從入口地址進入,並且為這個分配其確定大小的內存。事先不執行的內存都是為空,不為其分配,只有用到了並且明確了其所需多少內存時候才會分配。比如說一個函數僅僅定義了它,在沒用在調用它的時候系統是不能知道所佔用的內存,並且沒必要去開辟內存。只有執行到需要調用的,只需要如函數名(即入口的內存地址)開始分配並調用即可。
至於編譯為什麼能分配內存,這個是由操作系統和編譯器共同完成,內存是動態變化的,所以第三方用戶的程序使用的內存是執行時候系統和編譯器臨時給的地址。
這是鄙人的一些見解,如有不對請指出

『貳』 c語言的編譯器是干什麼用的

高級語言、匯編語言、機器語言這三種語言統稱「計算機語言」。其中,機器語言是最低級的,是一串一串的電流表示「0001101010010110010101000110」之類的數據,全部由0和1組成,這樣的語言是機器語言,只有機器才能記住這樣冗長而沒規律的數據,所以,用機器語言來編程序幾乎是不可能的。但要命令機器做一樣事情,必須用機器語言,怎麼辦呢?於是,產生了匯編語言,匯編語言比機器語言簡單一點,但還是很難明白,當時的編譯器就是把匯編語言轉換成機器語言,再命令機器做事。現在,出現了高級語言,最人性化,人們很容易讀懂,所以,我們可以直接輸入自己熟悉的語言,到達機器的時候變成了機器最熟悉的語言,編程序就很容易了。編譯器擔負的就是這個轉換工作。

『叄』 編譯器能夠完成的工作是

1. 詞法分析詞法分析器根據詞法規則識別出源程序中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。
2. 語法分析語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。
3. 語義分析語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。
4. 中間代碼生成中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。
5. 中間代碼優化
優化是編譯器的一個重要組成部分,由於編譯器將源程序翻譯成中間代碼的工作是機械的、按固定模式進行的,因此,生成的中間代碼往往在時間和空間上有很大浪費。當需要生成高效目標代碼時,就必須進行優化。
6. 目標代碼生成
目標代碼生成是編譯器的最後一個階段。在生成目標代碼時要考慮以下幾個問題:計算機的系統結構、指令系統、寄存器的分配以及內存的組織等。編譯器生成的目標程序代碼可以有多種形式:匯編語言、可重定位二進制代碼、內存形式。
7 符號表管理
符號表的作用是記錄源程序中符號的必要信息,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、准確的查找和操作。符號表中的某些內容甚至要保留到程序的運行階段。
8 出錯處理用戶編寫的源程序中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程序中的邏輯錯誤,它們發生在程序運行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,數組元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表達式中缺少操作數、begin和end不匹配等。靜態語義錯誤是指分析源程序時可以發現的語言意義上的錯誤,如加法的兩個操作數中一個是整型變數名,而另一個是數組名等。

『肆』 編譯器是什麼。

1、 visual c++6.0 (win8系統下不好用,C/C++)-Microsoft Visual C++ ;
2、 visual studio (2005、2008、2010、2012、2013)- Microsoft Visual Studio ;
3、 win-tc非常方便:不騙你,2000/XP/7都可以用 ;
4、 Code::Blocks(win7、8都可以用);
5、 Turb C(只能編譯C語言) ;
6、 gcc (GNU編譯器套件) ;
7、 DEV C++;
8、 C-Free;
9、 Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、My Tc等,由於C語言比較成熟,所以編程環境很多;
10、還常用souceinsight ,在工作中還用Labwindows編程,直接調試運行,不過那是有工程背景,有工作經驗的技術人員用的。

『伍』 編譯器的組成及各部分的功能及作用

1. 詞法分析 詞法分析器根據詞法規則識別出源程序中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。 2. 語法分析 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。 3. 語義分析 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。 4. 中間代碼生成 中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。 5. 中間代碼優化 優化是編譯器的一個重要組成部分,由於編譯器將源程序翻譯成中間代碼的工作是機械的、按固定模式進行的,因此,生成的中間代碼往往在時間和空間上有很大浪費。當需要生成高效目標代碼時,就必須進行優化。 6. 目標代碼生成 目標代碼生成是編譯器的最後一個階段。在生成目標代碼時要考慮以下幾個問題:計算機的系統結構、指令系統、寄存器的分配以及內存的組織等。編譯器生成的目標程序代碼可以有多種形式:匯編語言、可重定位二進制代碼、內存形式。 7 符號表管理 符號表的作用是記錄源程序中符號的必要信息,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、准確的查找和操作。符號表中的某些內容甚至要保留到程序的運行階段。 8 出錯處理用戶編寫的源程序中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程序中的邏輯錯誤,它們發生在程序運行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,數組元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表達式中缺少操作數、begin和end不匹配等。靜態語義錯誤是指分析源程序時可以發現的語言意義上的錯誤,如加法的兩個操作數中一個是整型變數名,而另一個是數組名等。

『陸』 C++編譯器是干什麼的有什麼用

編譯器是把你寫的c++代碼編譯成可執行的應用程序(例如exe)

『柒』 編譯器在編譯階段,究竟做哪些事情

1. 預處理首先源代碼文件(.c/.cpp)和相關頭文件(.h/.hpp)被預處理器cpp預編譯成.i文件(C++為.ii)。預處理命令為:gcc –E hello.c –o hello.i預編譯過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則如下:u 將所有的#define刪除,並且展開所有的宏定義;u 處理所有條件編譯指令,如#if,#ifdef等;u 處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。該過程遞歸進行,及被包含的文件可能還包含其他文件。u 刪除所有的注釋//和 /**/;u 添加行號和文件標識,如#2 「hello.c」 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時能夠顯示行號信息;u 保留所有的#pragma編譯器指令,因為編譯器須要使用它們。2. 編譯編譯過程就是把預處理完的文件進行一系列詞法分析,語法分析,語義分析及優化後生成相應的匯編代碼文件(.s)。編譯的命令為:gcc –S hello.i –o hello.s或者從源文件直接輸出匯編代碼文件:gcc –S hello.c –o hello.s現在版本的GCC把預編譯和編譯兩個步驟合並成一個步驟,由程序cc1來完成(C++為cc1plus)。3. 匯編匯編就是將匯編代碼轉變成機器可以執行的命令,生成目標文件(.o),匯編器as根據匯編指令和機器指令的對照表一一翻譯即可完成。匯編的命令為:gcc –c hello.s –o hello.o或者從源文件直接輸出目標文件:gcc –c hello.c –o hello.o4. 鏈接鏈接就是鏈接器ld將各個目標文件組裝在一起,解決符號依賴,庫依賴關系,並生成可執行文件。鏈接的命令為:ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o一般我們使用一條命令就可以完成上述4個步驟:gcc hello.c實際上gcc只是一些其它程序的包裝,它會根據不同參數去調用預編譯編譯程序cc1、匯編器as、鏈接器ld。

『捌』 簡述一下編譯器和鏈接器的作用

1、編譯器:
編譯器對源文件進行編譯,就是把源文件中的文本形式存在的源代碼翻譯成機器語言形式的目標文件的過程,在這個過程中,編譯器會進行一系列的語法檢查。如果編譯通過,就會把對應的CPP轉換成OBJ文件。
2、鏈接器:
當鏈接器進行鏈接的時候,首先決定各個目標文件在最終可執行文件里的位置。然後訪問所有目標文件的地址重定義表,對其中記錄的地址進行重定向(加上一個偏移量,即該編譯單元在可執行文件上的起始地址)。
然後遍歷所有目標文件的未解決符號表,並且在所有的導出符號表裡查找匹配的符號,並在未解決符號表中所記錄的位置上填寫實現地址。最後把所有的目標文件的內容寫在各自的位置上,再作一些另的工作,就生成一個可執行文件。

『玖』 華為方舟編譯器是干什麼用的

華為的方舟編譯器是屬於系統內部底層的一個架構,類似於安卓底層架構來的,是手機運行的重要程序。

閱讀全文

與編譯器幹了啥事兒相關的資料

熱點內容
伺服器的雙電是什麼意思 瀏覽:614
程序員離開後代碼運行幾天 瀏覽:386
多多樂app是什麼幹嘛的 瀏覽:346
文檔加密授權工具 瀏覽:436
命令與征服將軍閃退 瀏覽:132
vs2019預編譯怎麼設置 瀏覽:780
沈陽中軟python培訓班 瀏覽:493
逆戰文件夾怎麼放 瀏覽:120
怎麼統一刪除文件夾raw文件 瀏覽:121
卡爾曼濾波演算法書籍 瀏覽:769
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:844
安卓怎麼下載60秒生存 瀏覽:803
外向式文件夾 瀏覽:240
dospdf 瀏覽:431
怎麼修改騰訊雲伺服器ip 瀏覽:392
pdftoeps 瀏覽:496
為什麼鴻蒙那麼像安卓 瀏覽:736
安卓手機怎麼拍自媒體視頻 瀏覽:186
單片機各個中斷的初始化 瀏覽:724
python怎麼集合元素 瀏覽:481