芒果视频

網站分類
登錄 |    
Gcc
0 票數:0 #編程軟件#
Gcc(GNU Compiler Collection,GNU編譯器套件)是由GNU開發的編程語言編譯器,包括了C、C++、Objective-C、Fortran、Java、Ada和Go語言前端,也包括了這些語言的庫(如libstdc++,libgcj等)。GCC的初衷是為GNU操作系統專門編寫一款編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)采納為標準的編譯器,甚至在微軟的Windows上也可以使用GCC。
  • 外文名稱: GNU Compiler Collection
本百科詞條由網站注冊用戶"我心明亮"編輯上傳提供,詞條屬于開放詞條,當前頁面所展示的百科詞條介紹涉及宣傳內容屬于注冊用戶個人編輯行為。與Gcc的所屬企業/主題/所有人主體無關,詞條主體可以提供資料認證申請管理本詞條權限免費更新資料,也可以因內容與實際情況不符快速在線向網站提出反饋修改! 反饋
詳細介(jie)紹(shao) PROFILE +

基本介紹

GCC(GNU Compiler Collection,GNU編譯(yi)器(qi)套件)是(shi)由GNU開發的編程(cheng)語(yu)言(yan)(yan)譯(yi)器(qi)。GNU編譯(yi)器(qi)套件包(bao)括(kuo)C、C++、Objective-C、 Fortran、Java、Ada和Go語(yu)言(yan)(yan)前端,也包(bao)括(kuo)了這些(xie)語(yu)言(yan)(yan)的庫(如(ru)libstdc++,libgcj等。)

GCC的(de)(de)初衷是(shi)(shi)為GNU操作系(xi)統專門編(bian)寫的(de)(de)一款(kuan)編(bian)譯器。GNU系(xi)統是(shi)(shi)徹(che)底的(de)(de)自由軟(ruan)件。此處(chu),“自由”的(de)(de)含(han)義是(shi)(shi)它(ta)尊重用(yong)戶的(de)(de)自由。

產品設計

GCC的(de)外部接口長得像(xiang)一(yi)個(ge)(ge)標(biao)準的(de)Unix編(bian)譯器(qi)(qi)。使(shi)用者在命令列下鍵入(ru)gcc之(zhi)程(cheng)序名,以(yi)及(ji)一(yi)些(xie)命令參數,以(yi)便決定每個(ge)(ge)輸入(ru)檔案(an)使(shi)用的(de)個(ge)(ge)別語言編(bian)譯器(qi)(qi),并為輸出程(cheng)序碼使(shi)用適合此硬件平臺的(de)組合語言編(bian)譯器(qi)(qi),并且選擇性(xing)地執行(xing)連(lian)接器(qi)(qi)以(yi)制造可執行(xing)的(de)程(cheng)序。

每個(ge)(ge)語言編(bian)譯(yi)器(qi)(qi)都是獨立程(cheng)序,此(ci)程(cheng)序可處(chu)理(li)輸入的(de)(de)(de)原始碼,并輸出(chu)組合(he)語言碼。全部的(de)(de)(de)語言編(bian)譯(yi)器(qi)(qi)都擁有共(gong)通的(de)(de)(de)中介架(jia)構(gou):一個(ge)(ge)前端解(jie)析符(fu)合(he)此(ci)語言的(de)(de)(de)原始碼,并產(chan)生(sheng)一抽象語法樹,以及一翻譯(yi)此(ci)語法樹成為(wei)GCC的(de)(de)(de)暫(zan)存器(qi)(qi)轉換語言〈RTL〉的(de)(de)(de)后端。編(bian)譯(yi)器(qi)(qi)最佳化與(yu)靜(jing)態程(cheng)序碼解(jie)析技術(例(li)如FORTIFY_SOURCE,一個(ge)(ge)試圖發現緩沖區溢(yi)位〈buffer overflow〉的(de)(de)(de)編(bian)譯(yi)器(qi)(qi))在此(ci)階段應用(yong)于(yu)程(cheng)序碼上。最后,適用(yong)于(yu)此(ci)硬件架(jia)構(gou)的(de)(de)(de)組合(he)語言程(cheng)序碼以Jack Davidson與(yu)Chris Fraser發明的(de)(de)(de)算法產(chan)出(chu)。

幾乎(hu)全部(bu)的GCC都(dou)由(you)C寫(xie)成,除了Ada前(qian)端大部(bu)分以Ada寫(xie)成。

前端接口

前(qian)端的功能在(zai)于(yu)產生一個可讓(rang)后端處理之語法(fa)(fa)樹。此語法(fa)(fa)解(jie)析器是(shi)手寫之遞歸語法(fa)(fa)解(jie)析器。

直到(dao)2004年,程序的(de)語法(fa)樹結(jie)構(gou)尚無法(fa)與欲產出的(de)處理器(qi)架構(gou)脫(tuo)鉤。而語法(fa)樹的(de)規(gui)則有(you)時在不(bu)同的(de)語言前(qian)端也不(bu)一樣,有(you)些前(qian)端會(hui)提(ti)供它們特別(bie)的(de)語法(fa)樹規(gui)則。

在(zai)2005年,兩(liang)種與(yu)語(yu)(yu)言(yan)脫鉤的(de)(de)新型(xing)態(tai)(tai)語(yu)(yu)法(fa)樹納入(ru)GCC中。它們稱為(wei)GENERIC與(yu)GIMPLE。語(yu)(yu)法(fa)解析變成(cheng)產生(sheng)與(yu)語(yu)(yu)言(yan)相關的(de)(de)暫時語(yu)(yu)法(fa)樹,再將它們轉成(cheng)GENERIC。之(zhi)后再使用"gimplifier"技術降低GENERIC的(de)(de)復(fu)雜結構,成(cheng)為(wei)一較簡單的(de)(de)靜態(tai)(tai)唯一形式(Static Single Assignment form,SSA)基礎的(de)(de)GIMPLE形式。此形式是一個與(yu)語(yu)(yu)言(yan)和處理器架構脫鉤的(de)(de)全域最佳化通用語(yu)(yu)言(yan),適用于大(da)多數的(de)(de)現代(dai)編程語(yu)(yu)言(yan)。

中介接口

一(yi)般編譯器作者會將(jiang)語(yu)法樹的(de)最佳(jia)化放(fang)在前(qian)端(duan),但其(qi)實(shi)此(ci)(ci)步驟并不(bu)看語(yu)言(yan)的(de)種類(lei)而有不(bu)同,且不(bu)需(xu)要(yao)用到語(yu)法解(jie)析器。因此(ci)(ci)GCC作者們將(jiang)此(ci)(ci)步驟歸入通稱為(wei)中(zhong)介階段的(de)部分里(li)。此(ci)(ci)類(lei)的(de)最佳(jia)化包括消解(jie)死碼、消解(jie)重復運算與(yu)全域數值重編碼等。許(xu)多最佳(jia)化技(ji)巧(qiao)也正在實(shi)作中(zhong)。

后端接口

GCC后(hou)(hou)端(duan)的行為因(yin)不同(tong)的前(qian)處理器宏和特(te)定(ding)架構的功(gong)能而不同(tong),例如不同(tong)的字符尺寸、呼叫(jiao)方式(shi)與大小尾序等。后(hou)(hou)端(duan)接(jie)口的前(qian)半(ban)部利(li)用這些訊(xun)息決定(ding)其RTL的生成(cheng)形(xing)式(shi),因(yin)此雖然GCC的RTL理論上不受(shou)處理器影響,但在(zai)此階段(duan)其抽象指令(ling)已(yi)被轉換成(cheng)目標架構的格式(shi)。

GCC的(de)(de)最(zui)佳(jia)化(hua)技巧依其釋出版本(ben)而(er)有很大不(bu)同,但都包(bao)含了標準的(de)(de)最(zui)佳(jia)化(hua)算法(fa),例如循環最(zui)佳(jia)化(hua)、執行(xing)緒(xu)跳(tiao)躍、共通(tong)程(cheng)序(xu)子句消減、指令排程(cheng)等(deng)等(deng)。而(er)RTL的(de)(de)最(zui)佳(jia)化(hua)由于可(ke)用(yong)的(de)(de)情形較少,且(qie)缺(que)乏較高(gao)階的(de)(de)資訊,因此相(xiang)比(bi)較起(qi)來,增(zeng)加的(de)(de)GIMPLE語(yu)法(fa)樹形式(shi),便(bian)顯得比(bi)較不(bu)重(zhong)要。

后(hou)端經由一次重(zhong)讀取(qu)步驟后(hou),利用描述(shu)目(mu)標(biao)處(chu)理(li)器(qi)的(de)指(zhi)令集(ji)時所取(qu)得的(de)信息,將抽象暫存器(qi)替換成處(chu)理(li)器(qi)的(de)真實暫存器(qi)。此階段非常復雜,因為它必須關注所有(you)GCC可移植平臺的(de)處(chu)理(li)器(qi)指(zhi)令集(ji)的(de)規格與技(ji)術細(xi)節。

后(hou)端的(de)最(zui)后(hou)步驟相當公式化,僅僅將前一階段得(de)到的(de)匯編語言代碼(ma)藉由簡單的(de)子例程(cheng)轉(zhuan)換其暫存器(qi)與內存位置(zhi)成相對應的(de)機器(qi)碼(ma)。

特色功能

以2006年(nian)5月24日(ri)釋出的4.1.1版(ban)為準,本(ben)編譯器版(ban)本(ben)可處(chu)理下列語言:

Ada〈GNAT〉

C〈GCC〉

C++(G++)

Fortran〈Fortran77:G77,Fortran90:GFORTRAN〉

Java〈編譯器(qi):GCJ;解釋器(qi):GIJ〉

Objective-C〈GOBJC〉

Objective-C++

先(xian)前版(ban)本納入的CHILL前端由(you)于缺(que)乏維護而(er)被廢棄。

Fortran前端(duan)在4.0版(ban)之(zhi)前是G77,此前端(duan)僅支援Fortran77。在本版(ban)本中,G77被廢(fei)棄而采用(yong)更(geng)新的GFortran,因為此前端(duan)支援Fortran95。

下(xia)列(lie)前端依(yi)然存(cun)在:

Modula-2

Modula-3

Pascal

PL/I

D語言

Mercury

VHDL

相關內容推薦
發表評論
您還未登錄,依《網絡安全法》相關要求,請您登錄賬戶后再提交發布信息。點擊登錄>>如您還未注冊,可,感謝您的理解及支持!
最新(xin)評論(lun)
暫無評論
網站提醒和聲明
本站為(wei)注冊(ce)用(yong)(yong)戶提供信息(xi)存儲空(kong)間服(fu)務(wu),非“MAIGOO編輯(ji)上傳提供”的(de)文章/文字(zi)均是注冊(ce)用(yong)(yong)戶自主發布(bu)上傳,不(bu)代表本站觀點,更不(bu)表示本站支持購買和交易(yi),本站對網頁中(zhong)內容的(de)合(he)法性(xing)、準確性(xing)、真(zhen)實性(xing)、適用(yong)(yong)性(xing)、安全性(xing)等概(gai)不(bu)負責。版權(quan)歸(gui)原作者所有,如有侵權(quan)、虛假信息(xi)、錯(cuo)誤信息(xi)或任何問題,請及時(shi)聯系我(wo)們,我(wo)們將在第一時(shi)間刪除或更正。 申請刪除>> 糾錯>> 投訴侵權>>
提交說明: 查看提交幫助>> 注冊登錄>>
頁面相關分類
熱門模塊
已有3846097個品牌入駐 更新518570個招商信息 已發布1584923個代理需求 已有1343123條品牌點贊