# 【作業系統】Dynamic loading/Dynamic linking/Static linking ### Dynamic laoding : >背景 : 將整個程式載入 mem 會太佔空間 -> 使用 Dynamic loading 解決 mem 浪費的問題 Dynamic loading : 當程式被叫到時,才會**載入到記憶體**中 - 不會將整個程式 load 到記憶體,要用到那個 function code 才會 call 進 mem - 優點 : - 更好的記憶體空間使用 - 在大量程式碼使用率較低時特別有用 (e.g 大多都是是 error handling code 時) - 作業系統雖然提供 dynamic loading,但不會主動去做這件事,必須由使用者在 api 或函式庫中定義。  ### Dynamic linking : 在 <font color="#000ff">**run-time**</font> 才將相關的 object code modules **linking**起來 > ==目的== > 因為很多的程式都會使用一樣的函式庫,為了**避免一樣的函式庫被重複載入**,可以利用 Dynamic Loading 來解決 - 可能包含 dynamic laoding - 程式在編譯時就必須先設定好哪些函式庫為動態載入,程式在編譯時會加入一個 <font color="#FF0000">**stub** </font>的程式 - Stub 內記錄了++函式庫的目錄(reference)++ - 當執行時,程式會向 OS 確認 **stub** 在不在記憶體內,如果不在便透過 **dynamic loading** 載入  - 優點 : 數個程式可以**共用同一個 lib** -> **省空間** - 缺點 : 在 execution time 時可能比 static linking **慢**,因為要花時間 linking - e.g : - .dill / .so 檔 - DLL :在 Windows 的動態連結函式庫 ### Static linking : - 在 <font color="#000ff">**compile-time**</font>,將函式庫加入程式碼 - 優點:執行比較**快** - 缺點:**浪費記憶體資源**、有**程式碼重複**複製的問題  --- [*Reference*](https://www.youtube.com/watch?v=1z3QEs9WDmY&list=PLS0SUwlYe8cxj8FCPRoPHAehIiN9Vo6VZ&ab_channel=NTHUOCW)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.