① 靜態鏈接和動態鏈接的區別
靜態鏈接和動態鏈接的區別是靜態鏈接和動態鏈接兩者最大的區別就在於鏈接的時機不一樣,靜態鏈接是在形成可執行程序前,而動態鏈接的進行則是在程序執行時。
一、靜態鏈接
特點:在生成可執行文件的時候(鏈接階段),把所有需要的函數的二進制代碼都包含到可執行文件中去。因此,鏈接器需要知道參與鏈接的目標文件需要哪些函數,同時也要知道每個目標文件都能提供什麼函數,這樣鏈接器才能知道是不是每個目標文件所需要的函數都能正確地鏈接。如果某個目標文件需要的函數在參與鏈接的目標文件中找不到的話,鏈接器就報錯了。
靜態鏈接和動態鏈接的優缺點
一、靜態鏈接
1、優點:在程序發布的時候就不需要的依賴庫,也就是不再需要帶著庫一塊發布,程序可以獨立執行。
2、缺點:程序體積會相對大一些。如果靜態庫有更新的話,所有可執行文件都得重新鏈接才能用上新的靜態庫。
二、動態鏈接
1、優點: 多個程序可以共享同一段代碼,而不需要在磁碟上存儲多個拷貝。
2、缺點: 由於是運行時載入,可能會影響程序的前期執行性能。
② 操作系統中程序的鏈接:裝入時動態鏈接、運行時動態鏈接和靜態鏈接都是什麼意思有什麼區別
靜態鏈接是在生成可執行程序的時候就把庫中的內容加入到程序中。
載入時動態鏈接是在將功能模塊讀入內存時把動態庫中調用到的相關模塊的內容載入內存。
運行時動態鏈接是在執行程序調用到模塊內容時再將動態庫中的相應模塊載入到內存。
這里有兩個時間問題。一是載入時間,二是執行時間。
靜態鏈接由於是在一開始就把所有模塊都載入進入內存,所以如果模塊很多的話效率就會被大大拉低。
載入時動態鏈接是分別載入,當把一個模塊載入內存時檢查有調用關系的模塊載入,比靜態鏈接節省了許多開銷。
運行時動態鏈接則是把當前模塊調用的模塊推遲到調用的時候再載入。
三者之間的關系就像是機槍,沖鋒槍和手槍
機槍在一開始就把所有子彈裝好,開槍的時候很快,但也很笨重。
沖鋒槍則是將子彈分彈夾存好,輕便了許多,但是會有一段裝填時間。
手槍就更加輕便了,但是彈夾容量更小,裝填的頻率又變高了。