有關(guān)C/C++編譯器工作原理介紹
C/C++編譯器的工作原理是從源代碼到能直接被計(jì)算機(jī)或虛擬機(jī)執(zhí)行的目標(biāo)代碼的翻譯過程,但是C/C++編譯器最早產(chǎn)生的編譯器之一,好了下面進(jìn)行學(xué)習(xí)研究,希望大家能夠得到自己想要得東西。
在GCC家族中GNU GCC是根本,其它的編譯器版本都是從它導(dǎo)出的。其中,Cygwin和Mingw32都是WIN32平臺(tái)下的編譯器,DJGPP是DOS下的32位編譯器。大家所熟知的DEV-C++充其量只是GCC的一個(gè)外殼,它所自帶的編譯器就是Mingw32的一個(gè)版本。
這些GCC的版本中,Cygwin是***的,它與其說是一個(gè)編譯器,倒不如說是一套編程工具。它不僅有編譯器,還有其它很多的工具。其實(shí),它就是一個(gè)UNIX系統(tǒng)在WIN32平臺(tái)上的實(shí)現(xiàn)。實(shí)現(xiàn)了大多常用的UNIX工具,最近的版本中連Apache這樣的“工具”都集成進(jìn)來的。
不過,Cygwin雖然功能強(qiáng)大,但它卻不是很易用(和UNIX相似,熟悉UNIX的人用它可以很快上手),因?yàn)樘嗥渌墓ぞ叻稚⒘巳藗兊淖⒁饬ΑO啾戎翸ingw32就要好用得多,它只有最基本的幾個(gè)編程工具(只可惜它不自帶GDB)。
GCC中并不只是C/C++編譯器,其中還有很多其它的編譯器如JAVA,F(xiàn)ortran,ADA等。它是一個(gè)編譯器集合,不過有些編譯器只能在UNIX系統(tǒng)上用。MS家族的編譯器就不用說了,大家對(duì)它們都很熟悉。VC 7.0(VC.NET)是它的***產(chǎn)品。Borland家族也不用說,大家也是耳熟能詳。最近它才推出了BCB 6.0。
其它的編譯器如:Intel C/C++大家一看名稱就知道是Intel的東西,它和VC6完全兼容,不過要掛在VC6下才能用。C/C++編譯器是早先編譯器四國大戰(zhàn)中的一員,原本是很不錯(cuò)的東西,可惜戰(zhàn)略不對(duì),現(xiàn)在已不見聲息了。倒是以它為基礎(chǔ)的一個(gè)OpenWatcom現(xiàn)在還在奮戰(zhàn)。
VectorC是我近日才發(fā)現(xiàn)的一個(gè)好東東,它是個(gè)純C的編譯器。IBM的VisualAge for C++原本是IBM想用來淌C++編譯器這片渾水的東西,不過IBM的戰(zhàn)略改了,它就被放棄了。DigitalMars C/C++的前身的Symantec C++(它也是編譯器四國大戰(zhàn)中的一員),不過現(xiàn)在Symantec不做了,于是它的作者就把它改成了DigitalMars C/C++開放給大家使用。以上這些都是WIN32平臺(tái)上的東西。
KAI C/C++是個(gè)很強(qiáng)大的C/C++編譯器,它是個(gè)多平臺(tái)的編譯器。不過現(xiàn)在被INTEL收購了,已經(jīng)停止開發(fā)了。Lcc4.1是個(gè)純C的編譯器它是開放源代碼的。不過不怎么好用。LCC-WIN32是一個(gè)在LCC基礎(chǔ)上開發(fā)的C語言的集成開發(fā)環(huán)境,很好用,而且有很詳細(xì)的資料,F(xiàn)REE!Pacific C是一個(gè)純DOS的C的集成開發(fā)環(huán)境,就不多說了。
Small C CC386都是開放源代碼的編譯器,它們都很簡單,應(yīng)用來給大家學(xué)習(xí)編譯器的。Quincy Eic CINT都是C的解釋器,是用來讓大家學(xué)習(xí)C語言的其中CINT的功能很強(qiáng)大,還支持一些C++的特性。#t#
當(dāng)然還有很多其它的編譯器,這里我給出的編譯器都是可以在WIN32或DOS平臺(tái)上用的(除KAI外)。UNIX平臺(tái)上的編譯器還是以GNU的為主,其它的我就不是很清楚了。在以上的編譯器中,最特別的就是VectorC這個(gè)東西只支持純C。
但它卻號(hào)稱是最快的編譯器,不過經(jīng)過我的試驗(yàn),它的確在有些情況下強(qiáng)過其它編譯器很多!而且它還有個(gè)交互式的優(yōu)化器,可以讓你直接看到C代碼對(duì)映的匯編代碼。Cygwin和Mingw32為一母所生,其運(yùn)行效果相差不大。它們生成的代碼效率都很不錯(cuò),編譯的速度也很快,最值得一提的是它們對(duì)C++的特性的支持算是所有編譯器中最完全的,而且它們還支持C99的大部分特性。
這一點(diǎn)很是不錯(cuò)!大家對(duì)MS的VC已經(jīng)很熟悉了,本不用我多說。不過在它的***的產(chǎn)品VC7.0中,有很大的改進(jìn)。它對(duì)C++的特性的支持比6.0有了很大的提高,是我所用的編譯器中是僅次于GCC的。而且它編譯出的程序,運(yùn)行速度很快!僅有少數(shù)時(shí)候次于VectorC與GCC,其它情況都是最快的!其平均運(yùn)行速度是最快的。對(duì)Borland的產(chǎn)品我也無需多說。它的TC2.0與BC3.1都是我最喜歡的東西。
可是現(xiàn)在的BCB卻大不如前了,編譯的速度和VC6 一樣慢!IDE還有較多的BUG。最令人想不通的是它生成的代碼的運(yùn)行速度很慢,比LCC-WIN32還慢!它唯一值得一提的就是它的RAD做的比MS的好。Intel的編譯器大家可能不熟,它太貴了!
還要有VC的支持,很不劃算,而且編譯速度比VC6還慢。不過它的代碼質(zhì)量很不錯(cuò)。 DigitalMars C/C++沒有什么亮點(diǎn),編譯速度較快,代碼執(zhí)行速度適中,對(duì)C++特性支持還算不錯(cuò)。LCC-WIN32是個(gè)很不錯(cuò)的集成開發(fā)環(huán)境,它只支持純C。
它的編譯速度極快!代碼執(zhí)行速度較慢。不過它的***亮點(diǎn)在于它的IDE,在所有的FREE編程工具中,它的IDE是最專業(yè)的,有很強(qiáng)大的代碼分析,管理功能。而且它提供了大量的編程資料。
我曾對(duì)一些C/C++編譯器的代碼執(zhí)行效率做過一些測試,以下是概況:
1. VectorC、VC 7.0 (極快)
2. Intel C/C++、VC 6.0、GCC (很快)
3. DigitalMars C/C++ (一般)
4. LCC-WIN32、BCB、BC5.02 (較慢)
當(dāng)然,我所做的測試比較片面。不過在很大程度上已能反映其大概狀況。