芒果视频下载

網(wang)站分類(lei)
登錄 |    
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)紹 PROFILE +

基本介紹

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

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

產品設計

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

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

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

前端接口

前端的功能(neng)在于產生(sheng)一個可讓后端處理之(zhi)語(yu)法樹(shu)。此(ci)語(yu)法解(jie)析(xi)器是(shi)手寫(xie)之(zhi)遞歸語(yu)法解(jie)析(xi)器。

直到2004年,程(cheng)序(xu)的(de)(de)語(yu)法(fa)(fa)樹(shu)結構尚無法(fa)(fa)與欲產出的(de)(de)處(chu)理器架構脫鉤。而語(yu)法(fa)(fa)樹(shu)的(de)(de)規則(ze)有(you)時在不同(tong)的(de)(de)語(yu)言前(qian)端(duan)也不一樣,有(you)些前(qian)端(duan)會提供(gong)它們特別的(de)(de)語(yu)法(fa)(fa)樹(shu)規則(ze)。

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

中介接口

一般編(bian)譯器作(zuo)者(zhe)會(hui)將語(yu)法樹的(de)最佳(jia)(jia)化放(fang)在前端,但其實此(ci)步驟并不(bu)(bu)看語(yu)言的(de)種類(lei)而有不(bu)(bu)同,且不(bu)(bu)需要用到語(yu)法解析器。因(yin)此(ci)GCC作(zuo)者(zhe)們將此(ci)步驟歸(gui)入通稱(cheng)為中介階段的(de)部分里。此(ci)類(lei)的(de)最佳(jia)(jia)化包括(kuo)消解死碼、消解重(zhong)復(fu)運算(suan)與全域數值重(zhong)編(bian)碼等。許多最佳(jia)(jia)化技巧(qiao)也正(zheng)在實作(zuo)中。

后端接口

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

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

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

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

特色功能

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

Ada〈GNAT〉

C〈GCC〉

C++(G++)

Fortran〈Fortran77:G77,Fortran90:GFORTRAN〉

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

Objective-C〈GOBJC〉

Objective-C++

先前版本納入的CHILL前端(duan)由于(yu)缺(que)乏維(wei)護而(er)被(bei)廢棄(qi)。

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

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

Modula-2

Modula-3

Pascal

PL/I

D語言

Mercury

VHDL

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