芒果视频下载

網站分類
登錄 |    
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編(bian)譯器(qi)套(tao)件)是由GNU開發的(de)(de)編(bian)程語言譯器(qi)。GNU編(bian)譯器(qi)套(tao)件包(bao)括C、C++、Objective-C、 Fortran、Java、Ada和Go語言前端,也包(bao)括了這些(xie)語言的(de)(de)庫(如libstdc++,libgcj等。)

GCC的初衷是(shi)為(wei)GNU操作(zuo)系(xi)統專門編寫(xie)的一(yi)款編譯器(qi)。GNU系(xi)統是(shi)徹底的自(zi)由軟件。此(ci)處,“自(zi)由”的含義是(shi)它(ta)尊(zun)重用戶的自(zi)由。

產品設計

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

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

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

前端接口

前端的(de)功能在于產(chan)生一(yi)個可讓后端處(chu)理之(zhi)語(yu)法(fa)樹。此(ci)語(yu)法(fa)解(jie)析(xi)器(qi)是手寫之(zhi)遞歸語(yu)法(fa)解(jie)析(xi)器(qi)。

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

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

中介接口

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

后端接口

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

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

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

后端(duan)的(de)最后步驟(zou)相當公(gong)式化(hua),僅(jin)僅(jin)將前一階段得到的(de)匯編語(yu)言代碼藉由簡(jian)單的(de)子(zi)例程轉換其暫(zan)存器與內存位置(zhi)成相對應的(de)機器碼。

特色功能

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

Ada〈GNAT〉

C〈GCC〉

C++(G++)

Fortran〈Fortran77:G77,Fortran90:GFORTRAN〉

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

Objective-C〈GOBJC〉

Objective-C++

先前(qian)版本納入的(de)CHILL前(qian)端(duan)由(you)于缺乏(fa)維護而(er)被廢(fei)棄。

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

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

Modula-2

Modula-3

Pascal

PL/I

D語言

Mercury

VHDL

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