芒果视频下载

網站分類
登錄 |    
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的所屬企業/主題/所有人主體無關,詞條主體可以提供資料認證申請管理本詞條權限免費更新資料,也可以因內容與實際情況不符快速在線向網站提出反饋修改! 反饋
詳細介紹 PROFILE +

基本介紹

GCC(GNU Compiler Collection,GNU編譯(yi)器(qi)套件(jian))是由(you)GNU開發的(de)編程語言(yan)譯(yi)器(qi)。GNU編譯(yi)器(qi)套件(jian)包括C、C++、Objective-C、 Fortran、Java、Ada和Go語言(yan)前(qian)端,也(ye)包括了這些語言(yan)的(de)庫(如libstdc++,libgcj等。)

GCC的(de)(de)初衷是為GNU操(cao)作系(xi)統(tong)專門(men)編寫的(de)(de)一款編譯器。GNU系(xi)統(tong)是徹底的(de)(de)自由軟件。此處,“自由”的(de)(de)含義是它尊重用戶的(de)(de)自由。

產品設計

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

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

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

前端接口

前端(duan)的功能在(zai)于產(chan)生一個可(ke)讓(rang)后端(duan)處理(li)之語法樹。此語法解析器是手寫之遞(di)歸語法解析器。

直到2004年(nian),程序的語(yu)(yu)法樹(shu)結(jie)構尚無(wu)法與欲產(chan)出(chu)的處理器(qi)架構脫鉤。而語(yu)(yu)法樹(shu)的規(gui)則有時在不同的語(yu)(yu)言前(qian)端也不一樣,有些前(qian)端會提供它們特別的語(yu)(yu)法樹(shu)規(gui)則。

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

中介接口

一般編(bian)譯器作者會將(jiang)語法樹的(de)最(zui)佳(jia)化(hua)放在前端(duan),但(dan)其(qi)實(shi)此步驟(zou)(zou)并不看語言(yan)的(de)種類(lei)而有不同,且(qie)不需要用到語法解(jie)析器。因(yin)此GCC作者們將(jiang)此步驟(zou)(zou)歸入通(tong)稱為中介階段的(de)部分(fen)里。此類(lei)的(de)最(zui)佳(jia)化(hua)包(bao)括消(xiao)解(jie)死(si)碼、消(xiao)解(jie)重復運(yun)算與全(quan)域數值重編(bian)碼等。許多最(zui)佳(jia)化(hua)技巧也(ye)正在實(shi)作中。

后端接口

GCC后端的(de)(de)行為因不(bu)(bu)(bu)同的(de)(de)前處理(li)器宏(hong)和特定架構的(de)(de)功能而(er)不(bu)(bu)(bu)同,例如不(bu)(bu)(bu)同的(de)(de)字符尺(chi)寸、呼叫方式與大(da)小尾序等。后端接口的(de)(de)前半部利用這些(xie)訊息(xi)決(jue)定其RTL的(de)(de)生成形(xing)式,因此雖然GCC的(de)(de)RTL理(li)論上不(bu)(bu)(bu)受處理(li)器影響,但在(zai)此階段其抽象指令(ling)已被轉(zhuan)換成目(mu)標架構的(de)(de)格式。

GCC的最(zui)佳(jia)(jia)化(hua)技巧依其釋出版本而有很大不同,但都包含了(le)標準的最(zui)佳(jia)(jia)化(hua)算(suan)法(fa)(fa),例如循環最(zui)佳(jia)(jia)化(hua)、執行緒跳(tiao)躍、共通程(cheng)序子句(ju)消減、指令排程(cheng)等等。而RTL的最(zui)佳(jia)(jia)化(hua)由于可用的情(qing)形較少,且缺乏較高階(jie)的資訊,因此相(xiang)比較起來,增加的GIMPLE語法(fa)(fa)樹形式,便(bian)顯得比較不重要。

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

后端的最后步(bu)驟相當公式(shi)化,僅僅將前一(yi)階段(duan)得到的匯編語(yu)言代碼(ma)藉由簡(jian)單的子(zi)例(li)程轉換(huan)其暫存器(qi)與內存位置成相對(dui)應(ying)的機(ji)器(qi)碼(ma)。

特色功能

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

Ada〈GNAT〉

C〈GCC〉

C++(G++)

Fortran〈Fortran77:G77,Fortran90:GFORTRAN〉

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

Objective-C〈GOBJC〉

Objective-C++

先前版本(ben)納入(ru)的(de)CHILL前端由于缺(que)乏維護而(er)被廢(fei)棄。

Fortran前(qian)端在4.0版之前(qian)是G77,此(ci)前(qian)端僅支援Fortran77。在本版本中,G77被廢棄(qi)而(er)采用更新的GFortran,因為此(ci)前(qian)端支援Fortran95。

下列(lie)前端依然(ran)存在(zai):

Modula-2

Modula-3

Pascal

PL/I

D語言

Mercury

VHDL

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