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: 緩衝區溢出)




沒有留言:

張貼留言

Qt VLC lib Testing for how to use (Not For Tutorial)

Qt VLC Lib installation testing (Not For Tutorial just for Testing Processing) If you want the immediately work, see the bottom of the art...