芒果视频下载

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

基本介紹

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

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

產品設計

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

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

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

前端接口

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

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

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

中介接口

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

后端接口

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

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

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

后(hou)端的(de)最后(hou)步驟相(xiang)當公式化,僅(jin)僅(jin)將(jiang)前(qian)一階段得到的(de)匯編語言(yan)代碼藉由簡(jian)單的(de)子(zi)例(li)程(cheng)轉換其暫存器與內(nei)存位(wei)置(zhi)成相(xiang)對應(ying)的(de)機(ji)器碼。

特色功能

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

Ada〈GNAT〉

C〈GCC〉

C++(G++)

Fortran〈Fortran77:G77,Fortran90:GFORTRAN〉

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

Objective-C〈GOBJC〉

Objective-C++

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

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

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

Modula-2

Modula-3

Pascal

PL/I

D語言

Mercury

VHDL

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