網頁

2017年2月2日 星期四

計算機系統自讀筆記-Chapter1-1 漫遊

[本文為看書後的筆記整理]

計算機系統是由軟體跟硬體組合而成的。


源碼程式基本上是由一個值 0 和 1 所組成的,這些0和1在電腦裡稱做一個位元(bit),8個bit會組成一個位元組(byte)。

以我們最常見到的Hello World程式碼而言,該文件即是由一堆byte所組成的,而這些我們眼中的文字,轉換到電腦語言就是經由ASCII code 轉換而成的,而至於整體的程式意思還有是哪種變數,則需要依靠上下文才能夠做判斷。

C語言得起源於1969年~1973年被創建,定義了相當多的C語言的標準規定和函式庫,即所謂的C語言標準函式庫。
C語言雖然說很成功,但同樣也被說為有缺陷的程式,C語言和Unix系統有相當大的關連,Unix系統為一種電腦作業系統,也是與C語言一樣為同一個實驗室所創建;C語言也相對來說很簡單,沒有冗贅的設計,易於學習跟移植至其他系統上;C語言為為了寫Unix而創造,因此他們也很容易被其他人拿來寫程式,且相當適合用於寫應用程式。
至於他的缺點則為缺乏相當有用的抽象類別、class等等的支援,但在C++和Java這類的新程式上以可以解決這些問題。

程式轉換
C語言為人類可以看懂得高階語言,需要經過轉換才能改成機器所能看懂得低階語言;基本上整個的程式編譯過程分為以下幾段:

源程式碼 →  被修改過的程式碼 → 匯編程式 →  可重定位程式 (Relocatable Object Program)    → 可執行程式 

源程式碼 .cpp
     
    ↓    預處理階段 : cpp根據 # 開頭的文件修改原本的C語言程式,譬如 #include <stdio.h>       會將原本需要用到的stdio.h內容直接加入cpp文件當中,修改成另外一個程式。

修改過後的程式碼 .i 

    ↓      編譯階段  :編譯器將C語言匯編成低階的機器語言,這邊算是將所有不同程式語言編   譯成一樣程式的地方。

匯編程式 .s

     ↓      匯編階段  :將程式碼編譯成二進位的機器指令碼,這邊就是完全0和1的世界,不像   編譯完還有字符可以做判斷。

可重定位程式 .o

     ↓        鏈接階段  :調用printf 程式碼並和可重定位程式合併,最後將程式變為一個可以加   載到內存內的程式,並可以備系統執行。

可執行程式

________________
GCC

由GNU開發出來得一個慈善開源項目,為GNU工具鏈的一環,其C code的編譯器具有相當優量的跨平台編譯功能。
_________________

為甚麼我們需要了解編譯系統?

●因為我們可以更有效的呼叫適合的函數,以此優化我們的程式效能。
●了解Link Error
●避免安全漏洞 (For Example: 緩衝區溢出)




沒有留言:

張貼留言