電腦執行程式代碼的過程分析

來源:互聯網
上載者:User

標籤:

電腦語言的分類:

電腦語言的分類,大體上可以分為機器語言,組合語言,進階語言三大類。

 

機器語言:

電腦能夠直接執行的是機器語言,由二進位代碼來組成,可以直接對硬體進行操作,對於人來說,非常不容易編寫。

 

組合語言:

組合語言的是指和機器語言是相同的,都是直接對硬體進行操作,採用的是英文縮寫的標示符。同樣需要我們將每一步的具體操作都要用語言寫出來,比較複雜(相對於進階語言,但是肯定比機器語言好多啦)。

 

進階語言:

進階語言是將很多機器的指令合并,去掉了很多細節,大大簡化了程式,對於程式員的要求也低了很多。現在常用的C,C++,JAVA等等語言,都屬於進階語言。但是進階語言不能直接對硬體進行操作。

 

再來看一下幾個概念。

編譯,彙編過程,解釋,指令碼,解釋型語言,編譯型語言。

由於電腦智能讀懂機器語言,所以組合語言和進階語言必須經過一些列的處理來轉化為機器語言才可以。

對於組合語言,這個轉化過程,就是通過組譯工具,把組合語言轉化為機器語言,這個過程,成為彙編過程。

對於進階語言,就是通過編譯過程,使之轉化為機器語言。(編譯過程中其實也是經曆了先編譯成組合語言,再通過組譯工具轉化為機器語言的過程)一般通過編譯器來執行。

 

編譯器的翻譯過程,其實是分為編譯和解釋兩種的

編譯就是對於進階語言,一次性轉化為可執行檔機器語言,然後執行(執行的時候就沒有編譯器什麼事兒啦);

而解釋,相當於是一邊轉化,一邊啟動並執行,中間不產生可執行檔檔案,而每一次運行,都需要重新解釋一遍。不像編譯可以一次編譯,後面無論執行多少次都不用再重來了(代碼不變的話)。

從字面上理解,通過編譯來執行的語言是編譯型語言,通過解釋來啟動並執行是解釋行語言。解釋型語言有自己的解譯器。

 

java語言我們在上面沒有說,應該它不是標準的編譯型也不是標準的解釋型。

java也需要編譯,但是它是編譯成java位元組碼檔案,相當於可以直接運行在javaVm(虛擬機器)上的機器代碼。然後再對這個位元組碼檔案通過解釋的形式來運行,即對於位元組碼,通過解譯器,編譯一句,運行一句。

JAVA的解譯器,就相當一個JAVAVM.JAVA語言的這種特性,也形成了它跨平台的優點,JAVA位元組碼使得“寫一次,到處運行”。只要裝有JAVA虛擬機器的平台上,都可以運行。其實這一點,我以前不太理解,因為其他編譯型語言也可以編譯一次,運行多次。而且不像JAVA這麼麻煩,還要運行在JAVA虛擬機器上。現在想來,正是這種麻煩造就了跨平台的特點,因為其他語言直接編譯成的二進位機器碼,不一定能夠適應所有的平台。而只要能夠安裝JAVA虛擬機器的平台,都可以運行JAVA位元組碼。(web程式中,可以運行JAVA的瀏覽器也算是一種JAVAVm執行個體)。

一句話來說,其他語言是直接運行在硬體平台上的,而JAVA是運行在硬體平台上的純軟體平台上的。

 

 

 c ,c++的程式編譯過程:

 為了說明程式的編譯過程,我們用經典的hello world程式作為例子:

#include <stdio.h>int main(int argc, char const *argv[]){    printf("hello world!!!\n");    return 0;}

在linux系統中,我們用GCC編譯器將來源程式檔案helloworld.c編譯成可執行目標檔案helloworld。

[email protected]:~/test_code$ gcc helloworld.c -o hello[email protected]:~/test_code$ ./hellohello world!!!

 

這個過程經過四個階段,分別是預先處理階段,編譯階段,彙編階段和連結階段。執行這個四個階段的程式分別是前置處理器,編譯器,彙編器和連結器,一起構成了編譯系統。

 

 

•預先處理階段:前置處理器(cpp)根據‘#’包含的標頭檔,將標頭檔的內容加進來源程式中。得到新的程式檔案文本,以“.i”為副檔名。比如說helloworld程式包含stdio.h標頭檔, 這個階段將這個標頭檔的內容插進來源程式中
•編譯階段:編譯器(ccl)將文字檔hello.i翻譯成組譯工具hello.S。也就是將進階語言翻譯成彙編代碼,低級的機器語言指令。
•彙編階段:彙編器(as)將組譯工具hello.S翻譯成機器指令,將這些指令打包成可重定位目標程式的格式,並把結果儲存在hello.o檔案中,hello.o是個二進位檔案。
•連結階段:連結器(ld)將會把一個工程中所有的.o檔案連結合并成一個可執行目標檔案,可以被載入在記憶體中,由系統運行。 

以上就是c,c++程式編譯過程;

 

系統硬體組成:

 

 系統硬體組成:

程式具有訪問局部地區裡的資料和代碼的趨勢。通過將可能經常訪問的資料儲存在快取中的方法,大部分的儲存空間操作都將在快速的快取中完成,程式效能大大提升。 

 

作業系統管理硬體:

在處理器中,指令集結構是對實際處理器硬體的抽象,在作業系統中,檔案是對I/O的抽象,虛擬儲存空間是對程式儲存空間的抽象,進程是對

一個正在啟動並執行程式的抽象,虛擬機器則是對整個電腦(包括作業系統,處理器和程式)的抽象

 


 

                •堆: 堆可以啟動並執行時候動態地擴充和收縮,比如調用malloc或free函數的時候。

                •共用庫:大約在地址中間,用來存放像C標準庫或數學庫這樣共用程式碼和資料區域。

                •棧: 位於使用者虛擬位址空間頂部的是棧,編譯器同它來實現函數調用。和堆一樣,在程式運行期間可以動態地擴充和收縮。每調用函數,棧增長,函數返回,棧收縮。

                •核心虛擬儲存空間: 位於使用者虛擬位址空間頂部的是棧,編譯器同它來實現函數調用。和堆一樣,在程式運行期間可以動態地擴充和收縮。每調用函數,棧增長,函數返回,棧收縮。

 

電腦執行程式代碼的過程分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.