導航:首頁 > 源碼編譯 > 編譯程序比較復雜所以執行率高嗎

編譯程序比較復雜所以執行率高嗎

發布時間:2024-12-31 04:40:37

1. 匯編語言與C語言有什麼區別

1、操作復雜程度的不同

c語言,與匯編語言相比,c語言在更加接近人的一般思維,因此在程序的設計過程中比較容易操作,此外在進行一些復雜的操作,運算時,c語言比匯編就要簡單很多,尤其是c語言中的豐富的函數庫,可以直接實現一些原本很復雜的功能,並且從代碼量來說任意一個c語言程序,通過反匯編之後變成匯編語言程序,其長度都可能要增加好幾倍。

2、使用范圍的不同

c語言程序的事件將會只是編寫匯編語言程序的幾分之一,從編寫程序的效率上來說c語言無疑更高,此外C語言是高級程序語言因此可移植性較好,不太受到到硬體設備的限制。

在實現一個功能時,匯編語言可以直接奔著目標去,而C語言則是給你提供了一種對於對於這種問題的普遍處理辦法,不具有針對性,因此會有許多多餘的在這個問題中不需要的過程,因此可能回事程序較大,運行較慢。相對與匯編語言,C語言更加適合一些較大型項目的開發。

3、運行的速度和效率不同

程序沒有了匯編語言計算機直接就無法運行,因為匯編語言是基於計算機底層硬體的編程,通過它實現了對cpu,內存,硬碟以及外界設備的直接操作,因為直接所以匯編語言在程序的大小,執行的速度與效率方面幾乎無可比擬,但是也是因為直接,所以匯編程序難以移植,且完成相同的操作代碼量太大,在進行一些大的項目是,單獨使用匯編進行編程幾乎不可能實現。

2. 匯編語言有什麼特點

1、機器相關性

這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。

2、高速度和高效率

匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等,且佔用內存少,執行速度快,是高效的程序設計語言。

3、編寫和調試的復雜性

由於是直接控制硬體,且簡單的任務也需要很多匯編語言語句,因此在進行程序設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程序員的負擔。與此相同,在程序調試時,一旦程序的運行出了問題,就很難發現。

(2)編譯程序比較復雜所以執行率高嗎擴展閱讀

匯編語言的發展歷程:

說到匯編語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。機器指令展開來講就是一台機器可以正確執行的命令。電子計算機的機器指令是一列二進制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。

上面所說的計算機指的是可以執行機器指令,進行運算的機器。這是早期計算機的概念。在我們常用的PC機中,有一個晶元來完成上面所說的計算機的功能。這個晶元就是我們常說的CPU(Central Processing Unit,中央處理單元)。

每一種微處理器,由於硬體設計和內部結構的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。

早期的程序設計均使用機器語言。程序員們將用0, 1數字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分復雜,不方便閱讀和修改,也容易產生錯誤。

程序員們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給整個產業的發展帶來了障礙,於是匯編語言產生了。

3. 什麼是編譯性語言、解釋性語言和腳本語言

計算機不能直接理解高級語言,只能直接理解機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能值型高級語言編寫的程序。
翻譯的方式有兩種,一個是編譯,一個是解釋。兩種方式只是翻譯的時間不同。編譯型語言寫的程序執行之前,需要一個專門的編譯過程,把程序編譯成為機器語言的文件,比如exe文件,以後要運行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe文件),因為翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程序執行效率高。
解釋則不同,解釋性語言的程序不需要編譯,省了道工序,解釋性語言在運行程序的時候才翻譯,比如解釋性basic語言,專門有一個解釋器能夠直接執行basic程序,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就要翻譯一次,效率比較低。
1.腳本語言(javaScript,VBscript等)介於HTML和C,C++,Java,C#等編程語言之間。
HTML通常用於格式化和鏈結文本。而編程語言通常用於向機器發出一系列復雜的指令。
2.腳本語言與編程語言也有很多相似地方,其函數與編程語言比較相象一些,其也涉及到變數。與編程語言之間最大的區別是編程語言的語法和規則更為嚴格和復雜一些.
3.與程序代碼的關系:腳本也是一種語言,其同樣由程序代碼組成。
註:腳本語言一般都有相應的腳本引擎來解釋執行。 他們一般需要解釋器才能運行。JAVASCRIPT,ASP,PHP,PERL都是腳本語言。C/C++編譯、鏈接後,可形成獨立執行的exe文件。
4.腳本語言是一種解釋性的語言,例如vbscript,javascript,installshield script等等,它不象c/c++等可以編譯成二進制代碼,以可執行文件的形式存在.
腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。
5.腳本語言一般都是以文本形式存在,類似於一種命令.
舉個例子說,如果你建立了一個程序,叫aaa.exe,可以打開.aa為擴展名的文件.
你為.aa文件的編寫指定了一套規則(語法),當別人編寫了.aa文件後,你的程序用這種規則來理解編寫人的意圖,並作出回應.那麼,這一套規則就是腳本語言.JAVA語言
java很特殊,java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是編譯稱為位元組碼,然後用解釋方式執行位元組碼。Java既可以被編譯,也可以被解釋。通過編譯器,可以把Java程序翻譯成一種中間代碼 - 稱為位元組碼 - 可以被Java解釋器解釋的獨立於平台的代碼。通過解釋器,每條Java位元組指令被分析,然後在計算機上運行。只需編譯一次,程序運行時解釋執行。下圖說明了它是如何工作的

4. 計算機語言的種類

機器語言(二進制代碼)

匯編語言(面向機器的程序設計語言)

高級語言(按轉換方式可分兩類:

1、編譯型語言; 2、解釋型語言)

||按照客觀系統的描述可分兩類:

1、面向過程語言;

2、面向對象語言 ||

按照編程范型可分四類:

1、命令式語言;2、函數式語言;3、邏輯式語言;4、面向對象語言)

三種語言的優缺點

機器語言:可讀性、可移植性差,編程繁雜。直接執行,速度快,資源佔用少。匯編語言:不同的處理器有不同的匯編語言語法和編譯器,編譯的程序無法在不同的處理器上執行,缺乏可移植性,難於從匯編語言代碼上理解程序設計意圖,可維護性差,即使是完成簡單的工作也需要大量的匯編語言代碼,很容易產生bug,難於調試,使用匯編語言必須對某種處理器非常了解,而且只能針對特定的體系結構和處理器進行優化,開發效率很低,周期長且單調。能夠保持機器語言的一致性,直接、簡捷,並能像機器指令一樣訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等。使用匯編語言,可以訪問所有能夠被訪問的軟、硬體資源,目標代碼簡短,佔用內存少,執行速度快。高級語言:運行速度基本上比直接用匯編寫的慢,速度和程序大小與編譯軟體有關。高級語言接近演算法語言,易學、易掌握,級語言為程序員提供了結構化程序設計的環境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高;高級語言遠離機器語言,與具體的計算機硬體關系不大,可移植性好,重用率高;由於把繁雜瑣碎的事務交給了編譯程序去做,所以自動化程度高,開發周期短,且程序員得到解脫,可以集中時間和精力去從事對於他們來說更為重要的創造性勞動,以提高程序的質量。

高級語言的分類

按轉換方式可分為兩類:1、編譯型語言;2、解釋型語言

編譯型語言:編譯性語言寫的程序在被執行之前,需要一個專門的編譯過程,把程序編譯成為機器語言的文件,比如exe文件,以後要運行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe文件),因為翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程序執行效率高。解釋型語言:解釋性語言的程序不需要編譯,在運行程序的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就需要逐行翻譯一次,效率比較低。 現代解釋性語言通常把源程序編譯成中間代碼,然後用解釋器把中間代碼一條條翻譯成目標機器代碼,一條條執行。 關於腳本語言: 腳本語言是一種解釋性的語言,腳本語言是為了縮短傳統的編寫-編譯-鏈接-運行(edit-compile-link-run)過程而創建的計算機編程語言。腳本語言一般都 有相應的腳本引擎來解釋執行。 他們一般需要解釋器才能運行。一個腳本通常是解釋運行而非編譯。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程序員快速完成程序的編寫工作。而宏語言則可視為腳本語言的分支,兩者也有實質上的相同之處。腳本語言一般都是以文本形式存在,類似於一種命令。

解釋性語言:Java、Java、Perl、Python、Ruby、MATLAB 等。 編譯性語言: C/C++、Pascal/Object Pascal(Delphi) 腳本語言:Python、Java,ASP,PHP,Perl等

解釋性語言:Java、Java、Perl、Python、Ruby、MATLAB 等。 編譯性語言: C/C++、Pascal/Object Pascal(Delphi) 腳本語言:Python、Java,ASP,PHP,Perl等

按照客觀系統的描述可分為兩類:1.面向過程語言; 2.面向對象語言

面向過程語言:面向過程語言是以過程或函數為基礎的,這種語言對底層硬體,內存等操作比較方便,但是寫代碼和調試維護等會很麻煩。例如:c語言面向對象語言:面向對象語言(Object-Oriented Language)是一類以對象作為基本程序結構單位的程序設計語言,指用於描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。語言中提供了類、繼承等成分。 面向對象語言的發展有兩個方向:一種是純面向對象語言,如Smalltalk、EIFFEL等;另一種是混合型面向對象語言,即在過程式語言及其它語言中加入類、繼承等成分,如C++、Objective-C等

按照編程范型可分為:1.命令式語言; 2.函數式語言; 3.邏輯式語言; 4.面向對象語言

命令式語言: 命令式程序設計語言是基於動作的語言,以馮諾依曼計算機體系結構為背景。機器語言及匯編語言是最早的命令式語言。在這種語言中,計算機被看做是動作的序列,程序就是用語言提供的操作命令書寫的一個操作序列。用命令式程序設計語言編寫程序,就是描述解題過程中每一步的過程,程序的運行過程就是問題的求解過程,因此也稱為過程式語言。Fortran、ALGOL、COBOL、C、Ada、Pascal等都是命令式程序設計語言。函數式語言: 函數式編程是種編程典範,它將電腦運算視為函數的計算。函數編程語言最重要的基礎是 λ 演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(參數)和輸出(返回值)。和指令式編程相比,函數式編程強調函數的計算比指令的執行重要。和過程化編程相比,函數式編程里,函數的計算可隨時調用。這種語言的語義基礎是基於數學函數概念的值映射的λ運算元可計算模型。這種語言非常適合於進行人工智慧等工作的計算。典型的函數式語言如 Lisp、Haskell、ML、Scheme 、F#等。邏輯式語言: 這種語言的語義基礎是基於一組已知規則的形式邏輯系統。這種語言主要用在專家系統的實現中。最著名的邏輯式語言是 Prolog。面向對象語言: 現代語言中的大多數都提供面向對象的支持,但有些語言是直接建立在面向對象基本模型上的,語言的語法形式的語義就是基本對象操作。主要的純面向對象語言是 Smalltalk。

5. 匯編語言與高級語言的區別在哪裡

1、可讀性:

高級語言可讀性、可維護性較佳,匯編語言的可讀性較差。

2、程序的執行效率:

匯編語言程序的佔用空間小,執行速度快,執行效率高,高級語言佔用的空間大,執行效率較低。

3、可維護性:

匯編語言可維護性低很多,代碼復雜,針對性撰寫程序,可以得到速度快、穩定性高的結果。高級語言的可維護性較高。但是速度較慢,穩定性不高。

執行效率:匯編語言編寫的源程序比高級語言編寫的源程序執行效率高。

(5)編譯程序比較復雜所以執行率高嗎擴展閱讀:

匯編語言優缺點:

優點

匯編語言作為機器語言之上的第二代編程語言,它也有很多優點:

可以輕松地讀取存儲器狀態以及硬體I/O介面情況

編寫的代碼因為少了很多編譯的環節,可以能夠准確的被執行

作為一種低級語言,可擴展性很高

缺點

因為代碼非常單調,特殊指令字元很少,所以造成了代碼的冗長以及編寫的困難

因為匯編仍然需要自己去調用存儲器存儲數據,很容易出現BUG,而且調試起來也不容易

就算完成了一個程序,後期維護時候也需要耗費大量的時間。

因為機器的特殊性造成了代碼兼容性差的缺陷。

高級語言特點

高級編程語言作為一種通用的編程語言,它的語言結構和計算機本身的硬體以及指令系統無關,它的可閱讀性更強,能夠方便的表達程序的功能,更好的描述使用的演算法。

容易被初學者所掌握,很容易學習。而且容易學習掌握。

高級編程語言因為是一種編譯語言,所以他的運行速度比匯編程序要低,同時因為高級語言比較冗長,所以代碼的執行速度也要慢一些。

參考資料來源:網路-匯編語言

參考資料來源:網路-高級語言

6. 編譯型語言和解釋型語言的區別

編譯型語言和解釋型語言的區別是:執行效率不同、跨平台能力不同。

我們編寫的源代碼是人類語言,我們自己能夠輕松理解;但是對於計算機硬體(CPU),源代碼就是天書,根本無法執行,計算機只能識別某些特定的二進制指令,在程序真正運行之前必須將源代碼轉換成二進制指令。

所謂的二進制指令,也就是機器碼,是CPU能夠識別的硬體層面的「代碼」,簡陋的硬體(比如古老的單片機)只能使用幾十個指令,強大的硬體(PC和智能手機)能使用成百上千個指令。

然而,究竟在什麼時候將源代碼轉換成二進制指令呢?不同的編程語言有不同的規定:

有的編程語言要求必須提前將所有源代碼一次性轉換成二進制指令,也就是生成一個可執行程序(Windows下的.exe),比如C語言、C++、Golang、Pascal(Delphi)、匯編等,這種編程語言稱為編譯型語言,使用的轉換工具稱為編譯器。

有的編程語言可以一邊執行一邊轉換,需要哪些源代碼就轉換哪些源代碼,不會生成可執行程序,比如Python、JavaScript、PHP、Shell、MATLAB等,這種編程語言稱為解釋型語言,使用的轉換工具稱為解釋器。

簡單理解,編譯器就是一個「翻譯工具」,類似於將中文翻譯成英文、將英文翻譯成俄文。但是,翻譯源代碼是一個復雜的過程,大致包括詞法分析、語法分析、語義分析、性能優化、生成可執行文件等五個步驟,期間涉及到復雜的演算法和硬體架構。

Java和C#是一種比較奇葩的存在,它們是半編譯半解釋型的語言,源代碼需要先轉換成一種中間文件(位元組碼文件),然後再將中間文件拿到虛擬機中執行。Java引領了這種風潮,它的初衷是在跨平台的同時兼顧執行效率;C#是後來的跟隨者,但是C#一直止步於Windows平台,在其它平台鮮有作為。

解釋型語言

對於解釋型語言,每次執行程序都需要一邊轉換一邊執行,用到哪些源代碼就將哪些源代碼轉換成機器碼,用不到的不進行任何處理。每次執行程序時可能使用不同的功能,這個時候需要轉換的源代碼也不一樣。

因為每次執行程序都需要重新轉換源代碼,所以解釋型語言的執行效率天生就低於編譯型語言,甚至存在數量級的差距。計算機的一些底層功能,或者關鍵演算法,一般都使用C/C++實現,只有在應用層面(比如網站開發、批處理、小工具等)才會使用解釋型語言。

在運行解釋型語言的時候,我們始終都需要源代碼和解釋器,所以說它無法脫離開發環境。

當我們說「下載一個程序(軟體)」時,不同類型的語言有不同的含義:

對於編譯型語言,我們下載到的是可執行文件,源代碼被作者保留,所以編譯型語言的程序一般是閉源的。

對於解釋型語言,我們下載到的是所有的源代碼,因為作者不給源代碼就沒法運行,所以解釋型語言的程序一般是開源的。

相比於編譯型語言,解釋型語言幾乎都能跨平台,「一次編寫,到處運行」是真是存在的,而且比比皆是。那麼,為什麼解釋型語言就能快平台呢?

這一切都要歸功於解釋器!

我們所說的跨平台,是指源代碼跨平台,而不是解釋器跨平台。解釋器用來將源代碼轉換成機器碼,它就是一個可執行程序,是絕對不能跨平台的。

官方需要針對不同的平台開發不同的解釋器,這些解釋器必須要能夠遵守同樣的語法,識別同樣的函數,完成同樣的功能,只有這樣,同樣的代碼在不同平台的執行結果才是相同的。

你看,解釋型語言之所以能夠跨平台,是因為有了解釋器這個中間層。在不同的平台下,解釋器會將相同的源代碼轉換成不同的機器碼,解釋器幫助我們屏蔽了不同平台之間的差異。
關於Python
Python屬於典型的解釋型語言,所以運行Python程序需要解釋器的支持,只要你在不同的平台安裝了不同的解釋器,你的代碼就可以隨時運行,不用擔心任何兼容性問題,真正的「一次編寫,到處運行」。

Python幾乎支持所有常見的平台,比如Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC等,你所寫的Python代碼無需修改就能在這些平台上正確運行。也就是說,Python的可移植性是很強的。

總結

我們將編譯型語言和解釋型語言的差異總結為下表:

類型原理優點缺點編譯型語言通過專門的編譯器,將所有源代碼一次性轉換成特定平台(Windows、Linux等)執行的機器碼(以可執行文件的形式存在)。編譯一次後,脫離了編譯器也可以運行,並且運行效率高。可移植性差,不夠靈活。

解釋型語言由專門的解釋器,根據需要將部分源代碼臨時轉換成特定平台的機器碼。跨平台性好,通過不同的解釋器,將相同的源代碼解釋成不同平台下的機器碼。一邊執行一邊轉換,效率很低。

7. 為什麼C語言編寫的系統程序執行速度比用其他語言編寫的快

C語言是高級語言,編譯後生成可執行程序。
它的執行速度一般來說,比要通過解釋執行的語言快。但比匯編語言慢。

不一定比其它高級語言快,例如,數學運算方面,可能不如fortran快,當然,假定兩者用的演算法完全一樣。

如果演算法不同,兩種語言就不好比較了。例如,對整篇輸入文章進行語句結構或片語結構替代,用Perl 腳本比C快。

計算機語言其實是人的工具,例如,菜刀,斧頭,螺絲刀,各有所長,各有各的用途。菜刀切菜,斧頭劈柴,換過來用也不是不是可以,斧頭切菜,菜刀劈柴,效率差。

C語言同C語言比,速度也不一樣。MS VC++ 同 TB不一樣.
同一種C語言,編譯時用了優化1,優化2,執行程序快慢不同。

閱讀全文

與編譯程序比較復雜所以執行率高嗎相關的資料

熱點內容
單片機中ramrom是什麼顏色 瀏覽:38
dev編譯完不顯示控制台窗口 瀏覽:592
程序員自學有希望嗎 瀏覽:528
解壓助眠外國 瀏覽:1000
python帶格式讀取word 瀏覽:153
php開發人員簡歷模板 瀏覽:575
韓國都用什麼社交app 瀏覽:264
視頻伺服器端開發要掌握什麼知識 瀏覽:294
鈔票在手機屏幕上動是什麼app 瀏覽:22
C證App有什麼用 瀏覽:816
無錫專業cam編程培訓價格 瀏覽:527
用什麼app查企業是免費的 瀏覽:866
如何改變本地搭建的web伺服器的ip 瀏覽:318
主要單片機 瀏覽:745
腳本編程培訓 瀏覽:766
狐狸的夏天什麼app免費 瀏覽:494
什麼傳輸軟體可以蘋果安卓互傳 瀏覽:159
高數極限運演算法則怎麼使用 瀏覽:268
遠程桌面要加密傳輸 瀏覽:46
dll改名編譯器不報錯 瀏覽:131