《程式是怎樣跑起來的》,計算機程式很複雜嗎?

patriot_28發表於2020-09-25

CPU和記憶體

  • 程式是指令和資料的集合。
  • 記憶體地址是用來表示命令和資料儲存位置的數值。主存通過控制晶片與CPU相連。主存中的指令和資料會隨著計算機的關機自動清除。
  • CPU負責程式的解釋和執行,內部包括暫存器、控制器、運算器、時鐘。暫存器可以用來儲存指令、資料等處理物件,可以看做記憶體的一種。CPU是暫存器的集合體。
  • 記憶體的儲存場所通過地址編號來區分,暫存器的種類通過名字區分。
  • 程式的流程由程式計數器決定。分支和迴圈使用跳轉指令。函式調藉助棧用使用CALL指令和RETURN指令。通過基址暫存器和變址暫存器可以實現陣列的地址和索引。
  • 程式執行時,CPU會從記憶體中把指令和資料讀出來,並將其儲存在CPU內部的暫存器中進行處理。

二進位制資料

  • 位元組是資訊的基本單位,記憶體和磁碟都用位元組單位來儲存和讀寫資料,使用位單位無法進行資料讀寫。以2為基數儲存的資料叫二進位制資料,計算機以0、1的二進位制形式儲存資料。
  • 補碼使用正數表示負數。
  • 邏輯右移就是不考慮符號bai位,右移一位,左du邊補零即可。算術右移需zhi要考慮符號位,dao右移一位,若符號位為1,就在左邊補1,;否則,就補0。所以算術右移也可以進行有符號位的除法,右移,n位就等於除2的n次方。
  • 由於小數部分使用二進位制表示的特殊性,計算機會根據變數資料的型別所對應的長度將數值進行截斷或四捨五入,如1/3變成0.333333,乘以3後得到0.999999,而不是1。避免計算機計算出錯的兩種方式:一是根據實際情況忽略誤差,如將100個0.1毫米的零件相連,其長度不必是10毫米,10.000002也是沒有問題的;二是把小數換成正數計算,如現將0.1毫米乘以10,然後再乘以100,得到總和再除以10。
  • 資料壓縮有REL(Run Length Encoding,行程長度編碼)、哈夫曼樹編碼等。
  • 資料壓縮有可逆壓縮和非可逆壓縮(如傅立葉變換實現的資料壓縮)兩種。

記憶體是有稜有角的

  • 高階程式語言中的資料型別表示佔據記憶體區域的大小和儲存在該區域的是何種型別的資料。
  • 記憶體中有電源、地址訊號、資料訊號、控制訊號等用於輸入輸出的大量引腳,通過為其指定地址(address)來進行資料的讀寫。
  • 指標也是一種變數,它所表示的不是資料的值,二是儲存著資料的記憶體的地址。通過指標,可以對任意指定的資料進行讀寫。
  • 佇列是先進先出,棧是後進先出。佇列一般以環形緩衝區的方式實現。
  • 陣列可以隨機讀取資料(這個隨機是指可以隨時根據任意的地址進行資料讀取,不是說每次讀取的資料都是隨機的、不相同的)。連結串列使元素的插入和刪除更為簡便。
  • 磁碟快取(disk cache)可以加快磁碟訪問速度。磁碟快取是指把從磁碟讀取的資料儲存到記憶體空間中,便於下次直接從記憶體讀取,而不用再次讀取磁碟。
  • 虛擬記憶體把磁碟作為部分記憶體使用,有分頁式和分段式兩種。
  • 使用動態連結庫(DDL,Dynamic Link Library)可以節約記憶體。
  • 磁碟是通過把其物理表面劃分成多個空間來使用的。劃分的方式有扇區和可變長兩種方式。前者指將磁碟劃分為固定長度的空間,後者指把磁碟劃分成長度可變的空間。

程式的執行環境

  • 執行環境是作業系統和計算機本身(硬體)的種類。應用是為了在特定作業系統上執行而做成的。
  • 機器語言的程式稱為原生程式碼,是CPU可以解析和執行的程式形式。
  • 堆的記憶體空間會根據程式的命令進行申請和釋放。

組合語言

  • 原生程式碼的指令中,表示其功能的英文縮寫叫助記符。

相關文章