靜態連接庫與動態連接庫

  靜態連接庫與動態連接庫都是共享代碼的方式。函數

靜態連接庫(lib): 在程序執行以前完成全部的組裝工做,生成一個可執行的目標文件(EXE文件)。性能

  靜態庫的兩個特色:spa

  1. 連接後產生的可執行文件包含了全部須要調用的函數的代碼,所以佔用磁盤空間較大。
  2. 若是有多個(調用相同庫函數的)進程在內存中同時運行,內存中就存有多份相同的庫函數代碼,所以佔用內存空間較多。

動態連接庫(dll&lib): 在程序裝載內存的時候才真正的把庫函數代碼連接進行肯定它們的地址,而且就算有幾個程序同時運行,內存也只存在一份函數代碼。動態庫的代碼必須知足這樣一種條件:可以被加載到不一樣進程的不一樣地址。根據載入程序什麼時候肯定動態代碼的邏輯地址,能夠把動態裝載分爲兩類:進程

  • 靜態綁定(static binding): 裝載時動態連接,使用靜態綁定的程序一開始載入內存的時候,載入程序就會把程序全部調用到的動態代碼的地址算出肯定下來,這種方式使程序剛運行的初始化時間較長,不過旦完成動態裝載,程序的運行速度就很快。
  • 動態綁定(dynamic binding):運行時動態連接,使用這種方式的程序並不在一開始就完成動態連接,而是直到真正調用動態庫代碼時,載入程序才計算(被調用的那部分)動態代碼的邏輯地址,而後等到某個時候,程序又須要調用另外某塊動態代碼時,載入程序又去計算這部分代碼的邏輯地址,因此,這種方式使程序初始化時間較短,但運行期間的性能比不上靜態綁定的程序。

 

靜態連接庫和動態連接庫區別:內存

  1. 靜態連接庫在程序執行以前就完成了庫的裝載,而動態連接庫是在程序執行過程當中加載。
  2. 當有多處須要同一函數時,動態連接庫只須要一份拷貝便可,而靜態連接庫則須要多份拷貝。
  3. 靜態連接庫不能再包含其餘的靜態連接庫或動態連接庫,而動態連接庫還能夠包含其餘的靜態連接庫或動態連接庫。
  4. 若是改變庫函數,包含靜態連接庫的程序須要從新連接,而包含動態連接庫的程序則不須要,於是極大地提升了可維護性和可擴展性。
相關文章
相關標籤/搜索