最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

編譯和解釋的區(qū)別是什么

 更新時間:2016年12月07日 10:09:56   作者:petercao  
最近發(fā)現(xiàn)有很多網(wǎng)友都提出一個問題:程序的編譯與解釋有什么區(qū)別?這篇文章就為大家介紹了編譯和解釋的區(qū)別,需要的朋友可以參考下

編譯和解釋的區(qū)別是什么?

編譯器是把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;

而解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機器語言給計算機來執(zhí)行,所以運行速度是不如編譯后的程序運行的快的.

這是因為計算機不能直接認識并執(zhí)行我們寫的語句,它只能認識機器語言(是二進制的形式) 

一、低級語言與高級語言

最初的計算機程序都是用0和1的序列表示的,程序員直接使用的是機器指令,無需翻譯,從紙帶打孔輸入即可執(zhí)行得到結(jié)果。后來為了方便記憶,就將用0、1序列表示的機器指令都用符號助記,這些與機器指令一一對應的助記符就成了匯編指令,從而誕生了匯編語言。無論是機器指令還是匯編指令都是面向機器的,統(tǒng)稱為低級語言。因為是針對特定機器的機器指令的助記符,所以匯編語言是無法獨立于機器(特定的CPU體系結(jié)構(gòu))的。但匯編語言也是要經(jīng)過翻譯成機器指令才能執(zhí)行的,所以也有將運行在一種機器上的匯編語言翻譯成運行在另一種機器上的機器指令的方法,那就是交叉匯編技術(shù)。

高級語言是從人類的邏輯思維角度出發(fā)的計算機語言,抽象程度大大提高,需要經(jīng)過編譯成特定機器上的目標代碼才能執(zhí)行,一條高級語言的語句往往需要若干條機器指令來完成。高級語言獨立于機器的特性是靠編譯器為不同機器生成不同的目標代碼(或機器指令)來實現(xiàn)的。那具體的說,要將高級語言編譯到什么程度呢,這又跟編譯的技術(shù)有關(guān)了,既可以編譯成直接可執(zhí)行的目標代碼,也可以編譯成一種中間表示,然后拿到不同的機器和系統(tǒng)上去執(zhí)行,這種情況通常又需要支撐環(huán)境,比如解釋器或虛擬機的支持,Java程序編譯成bytecode,再由不同平臺上的虛擬機執(zhí)行就是很好的例子。所以,說高級語言不依賴于機器,是指在不同的機器或平臺上高級語言的程序本身不變,而通過編譯器編譯得到的目標代碼去適應不同的機器。從這個意義上來說,通過交叉匯編,一些匯編程序也可以獲得不同機器之間的可移植性,但這種途徑獲得的移植性遠遠不如高級語言來的方便和實用性大。

二、編譯與解釋

編譯是將源程序翻譯成可執(zhí)行的目標代碼,翻譯與執(zhí)行是分開的;而解釋是對源程序的翻譯與執(zhí)行一次性完成,不生成可存儲的目標代碼。這只是表象,二者背后的最大區(qū)別是:對解釋執(zhí)行而言,程序運行時的控制權(quán)在解釋器而不在用戶程序;對編譯執(zhí)行而言,運行時的控制權(quán)在用戶程序。

解釋具有良好的動態(tài)特性和可移植性,比如在解釋執(zhí)行時可以動態(tài)改變變量的類型、對程序進行修改以及在程序中插入良好的調(diào)試診斷信息等,而將解釋器移植到不同的系統(tǒng)上,則程序不用改動就可以在移植了解釋器的系統(tǒng)上運行。同時解釋器也有很大的缺點,比如執(zhí)行效率低,占用空間大,因為不僅要給用戶程序分配空間,解釋器本身也占用了寶貴的系統(tǒng)資源。

編譯器是把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機器語言給計算機來執(zhí)行,所以運行速度是不如編譯后的程序運行的快的.

  • 編輯:用編輯軟件(EDIT.EXE或記事本)形成源程序(.ASM),如:LX.ASM;
  • 匯編:用匯編程序(MASM.EXE)對源程序進行匯編,形成目標文件(.OBJ),格式如下:MASM LX.ASM;
  • 連接:用連接程序(LINK.EXE)對目標程序進行連接,形成可執(zhí)行文件(.EXE),格式如下:LINK LX.OBJ;
  • 執(zhí)行:如果結(jié)果在屏幕在顯示,則直接執(zhí)行可執(zhí)行文件。
  • 調(diào)試:用調(diào)試程序(DEBUG.EXE)對可執(zhí)行文件進行調(diào)試,格式如下:DEBUG LX.EXE

1. 在具體計算機上實現(xiàn)一種語言,首先要確定的是表示該語言語義解釋的虛擬計算機,一個關(guān)鍵的問題是程序執(zhí)行時的基本表示是實際計算機上的機器語言還是虛擬機的機器語言。這個問題決定了語言的實現(xiàn)。根據(jù)這個問題的回答,可以將程序設(shè)計語言劃分為兩大類:編譯型語言和解釋型語言。

2. 由編譯型語言編寫的源程序需要經(jīng)過編譯、匯編和鏈接才能輸出目標代碼,然后機器執(zhí)行目標代碼,得出運行結(jié)果,目標代碼由機器指令組成,一般不能獨立運行,因為源程序中可能使用了某些匯編程序不能解釋引用的庫函數(shù),而庫函數(shù)代碼又不在源程序中,此時還需要鏈接程序完成外部引用和目標模塊調(diào)用的鏈接任務(wù),最后輸出可執(zhí)行代碼。C、C++、Fortran、Pascal、Ada都是編譯實現(xiàn)的。

3. 解釋型語言的實現(xiàn)中,翻譯器并不產(chǎn)生目標機器代碼,而是產(chǎn)生易于執(zhí)行的中間代碼,這種中間代碼與機器代碼是不同的,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件解釋器通常會導致執(zhí)行效率較低。用解釋型語言編寫的程序是由另一個可以理解中間代碼的解釋程序執(zhí)行的。與編譯程序不同的是,解釋程序的任務(wù)是逐一將源程序的語句解釋成可執(zhí)行的機器指令,不需要將源程序翻譯成目標代碼后再執(zhí)行。對于解釋型Basic語言,需要一個專門的解釋器解釋執(zhí)行 Basic程序,每條語言只有在執(zhí)行才被翻譯。這種解釋型語言每執(zhí)行一次就翻譯一次,因而效率低下。

4. Java很特殊,Java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是編譯稱為字節(jié)碼,然后在Java虛擬機上用解釋方式執(zhí)行字節(jié)碼。Python 的也采用了類似Java的編譯模式,先將Python程序編譯成Python字節(jié)碼,然后由一個專門的Python字節(jié)碼解釋器負責解釋執(zhí)行字節(jié)碼。

   (Java虛擬機對字節(jié)碼的執(zhí)行相當于模擬一個cpu,而ruby1.8--在虛擬機還未出現(xiàn)前--是通過解釋成語法樹執(zhí)行。)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vscode任務(wù)配置之tasks.json用途說明

    vscode任務(wù)配置之tasks.json用途說明

    這篇文章主要介紹了vscode任務(wù)配置之tasks.json的相關(guān)資料,在VSCode中配置任務(wù)主要涉及到編輯task.json文件,可以定義編譯、構(gòu)建、測試等任務(wù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01
  • 學習哪門編程語言最有前途,最好賺錢,需求量高

    學習哪門編程語言最有前途,最好賺錢,需求量高

    近期有很多同學想學習編程,不知道選擇哪種語言比較好,這里簡單的給大家介紹一下,其實看個人發(fā)展,無論選擇哪個只要努力都是賺錢的
    2017-08-08
  • 詳解SHA-256算法的原理以及C#和JS的實現(xiàn)

    詳解SHA-256算法的原理以及C#和JS的實現(xiàn)

    SHA-256 是 SHA-2 下細分出的一種算法。截止目前(2023-03)未出現(xiàn)“碰撞”案例,被視為是絕對安全的加密算法之一,本文主要介紹了SHA-256算法的原理以及C#和JS的實現(xiàn),希望對大家有所幫助
    2023-03-03
  • Iris 環(huán)境搭建詳細教程(最新版Go&IDEA&IrisV12)

    Iris 環(huán)境搭建詳細教程(最新版Go&IDEA&IrisV12)

    這篇文章主要介紹了Iris 環(huán)境搭建(最新版Go&IDEA&IrisV12),本文通過示例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 總結(jié)近幾年P(guān)ytorch基于Imgagenet數(shù)據(jù)集圖像分類模型

    總結(jié)近幾年P(guān)ytorch基于Imgagenet數(shù)據(jù)集圖像分類模型

    在過去的幾年里,許多深度學習模型涌現(xiàn)出來,例如層的類型、超參數(shù)等。在本系列中,我將回顧幾個最顯著的 deeplearn 圖像分類的模型
    2021-08-08
  • OpenManus本地部署實戰(zhàn)親測有效完全免費(最新推薦)

    OpenManus本地部署實戰(zhàn)親測有效完全免費(最新推薦)

    文章介紹了如何在本地部署OpenManus大語言模型,包括環(huán)境搭建、LLM編程接口配置和測試步驟,本文給大家講解的非常詳細,感興趣的朋友一起看看吧
    2025-03-03
  • 都2019年了,還問http中GET和POST的區(qū)別

    都2019年了,還問http中GET和POST的區(qū)別

    最近看了一些同學的面經(jīng),發(fā)現(xiàn)無論什么技術(shù)崗位,還是會問到 get 和 post 的區(qū)別,而搜索出來的答案并不能讓我們裝得一手好逼,那就讓我們從 HTTP 報文的角度來擼一波,從而搞明白他們的區(qū)別
    2019-02-02
  • ChatGPT 中文調(diào)教指南總結(jié)

    ChatGPT 中文調(diào)教指南總結(jié)

    ChatGPT是一個訓練有素的大型語言模型,可以幫助你回答各種問題,本文介紹了ChatGPT 中文調(diào)教指南,感興趣的可以了解一下
    2023-05-05
  • Git中tag標簽的使用教程

    Git中tag標簽的使用教程

    這篇文章介紹了Git中tag標簽的使用教程,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 從實例分析ELF格式的.gnu.hash區(qū)與glibc的符號查詢?nèi)^程

    從實例分析ELF格式的.gnu.hash區(qū)與glibc的符號查詢?nèi)^程

    把ELF格式是如何組織一個符號,以及動態(tài)鏈接器如何讀取并處理這些信息以進行符號查詢的全過程詳細地講清楚,本文的實現(xiàn)以及so文件均以glibc 2.31為準,對ELF格式的.gnu.hash區(qū)與glibc的符號查詢知識感興趣的朋友一起學習吧
    2021-05-05

最新評論

上虞市| 旬阳县| 永昌县| 常山县| 囊谦县| 德阳市| 连云港市| 民乐县| 开封市| 卢龙县| 饶河县| 兰州市| 台东县| 青州市| 广昌县| 碌曲县| 阜阳市| 亚东县| 兴城市| 汕头市| 哈密市| 湖州市| 慈利县| 庆城县| 景宁| 卢湾区| 顺义区| 承德市| 新干县| 呼伦贝尔市| 时尚| 千阳县| 虞城县| 云和县| 英吉沙县| 商洛市| 无棣县| 莒南县| 安远县| 凉山| 大同市|