日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

編譯型語言與解釋型語言有何區(qū)別

計算機(jī)只能執(zhí)行二進(jìn)制代碼
也許你已經(jīng)知道,計算機(jī)是基于二進(jìn)制運(yùn)行的 。就像道家哲學(xué)的陰陽一樣,計算機(jī)只有兩個狀態(tài),開或關(guān)、真或假、1或0…因為,組成計算機(jī)的基本元件——半導(dǎo)體只能以二進(jìn)制進(jìn)行計算 。我們編程所用的C/C++、Python、大數(shù)據(jù)、AI等層出不窮的技術(shù),以及我們存儲在電子設(shè)備的文本、音頻、圖像、視頻等媒介,最終都是以二進(jìn)制的形式,被計算和處理的 。計算機(jī)體系最底層的工程師要使用二進(jìn)制代碼控制芯片來做計算和處理 。
我在我的Mac上編寫了一個名為的程序,其二進(jìn)制和匯編代碼如下所示:
首行的表示這是一個可以運(yùn)行在64位x86架構(gòu)的處理器上、基于Mac OS的一段程序 。不同的計算機(jī)芯片廠商所設(shè)計的半導(dǎo)體電路不同,在芯片上編程的二進(jìn)制規(guī)則不同 。執(zhí)行同樣的一段的邏輯,在基于ARM架構(gòu)芯片的Android手機(jī)上所需要的二進(jìn)制代碼與上面展示的會截然不同 。當(dāng)前市場上計算機(jī)CPU芯片基本被幾大科技公司壟斷,除了剛提到的Intel和AMD研發(fā)的應(yīng)用在個人電腦上的x86-64處理器,應(yīng)用在手機(jī)、平板電腦等移動設(shè)備上的ARM架構(gòu)處理器,還有應(yīng)用在大型服務(wù)器和超級計算機(jī)上的IBM Power系列處理器等 。不同架構(gòu)的CPU處理器都有自己的一套指令集(instruction set architecture,簡稱ISA),這就像一個設(shè)計圖紙和使用說明書,告訴編程人員如何使用在其芯片上進(jìn)行編程:包括如何進(jìn)行加減乘除計算,如何從內(nèi)存中讀取數(shù)據(jù)等指令操作 。底層開發(fā)人員會根據(jù)不同指令集,適配不同的CPU處理器 。計算機(jī)能執(zhí)行的指令,又被成為機(jī)器語言或機(jī)器碼 。
前面所展示的二進(jìn)制文件是一個 。什么是可執(zhí)行文件呢?可執(zhí)行文件就是二進(jìn)制機(jī)器語言的集合,可以被機(jī)器執(zhí)行,得到我們想要的結(jié)果 。我們在Windows上常會遇到的文件,就是可執(zhí)行文件,其實是的縮寫,從手機(jī)應(yīng)用商店下載的APP也是可執(zhí)行文件的一種變體 。
C語言從源代碼到可執(zhí)行文件
很多朋友覺得C/C++編程調(diào)試難,沒有比較就沒有傷害,看到前文所提到的一個簡單加法的程序竟然需要這么多看不懂的01代碼,是不是覺得C語言簡直是天才般的發(fā)明 。是的,C語言的發(fā)明者當(dāng)時考慮的就是不同芯片廠商有不同的指令集,相互之間難以兼容,于是想在那些晦澀難懂的底層語言上,建立一個更為通用的編程范式,這樣編程人員不用浪費(fèi)時間精力去識記大量的01二進(jìn)制指令 。那C語言代碼是如何轉(zhuǎn)化為可被機(jī)器執(zhí)行的二進(jìn)制文件呢?編譯器和操作系統(tǒng)是兩個非常關(guān)鍵的技術(shù) 。
下面繼續(xù)以加法計算源代碼為例,展示編譯器和操作系統(tǒng)計算機(jī)將C語言轉(zhuǎn)化為機(jī)器可執(zhí)行文件 。
Linux和Mac OS用戶可以使用這個命令來將的源代碼編譯成名為的可執(zhí)行文件,會生成在當(dāng)前的文件夾下 。
執(zhí)行這個二進(jìn)制文件,結(jié)果將被打印到屏幕上:
是一款開源的編譯器,是GNU Compiler Collection中的一員,它可以將C語言代碼編譯成可執(zhí)行文件 。GNU Compiler Collection還有C++編譯器、Fortran編譯器,并且支持包括x86-64和ARM在內(nèi)的不同指令集 。

編譯型語言與解釋型語言有何區(qū)別


C語言從源代碼到執(zhí)行,要使用編譯器來編譯(compile)、匯編(assembly)并連接(link)所依賴的庫,形成機(jī)器可執(zhí)行文件 。執(zhí)行這個二進(jìn)制文件時,操作系統(tǒng)會為程序分配內(nèi)存和CPU資源 ?!熬幾g”和“匯編”,相當(dāng)于將C語言翻譯成底層語言 。另外,代碼中使用了庫函數(shù),當(dāng)我們使用別人寫好的函數(shù)時,需要將這些前人寫好的庫函數(shù)連接到我們的可執(zhí)行文件中,否則會調(diào)用函數(shù)失敗的錯誤 。我們將這種需要編譯的語言稱為編譯型語言 。編譯型語言有C/C++、Fortran等 。

推薦閱讀