靜態庫與DLL
靜態庫與DLL的不同之處
可執行檔案的生成(Link期):前者很慢(因為要將庫中的所有符號定義Link到EXE檔案中),而後者很快(因為後者被Link的引入庫檔案無符號定義)
可執行檔案的大小:前者很大,後者很小(加上DLL的大小就和前者差不多了)
可執行檔案的執行速度:前者快(直接在EXE模組的記憶體中查詢符號),後者慢(需要在DLL模組的記憶體中查詢,在另一個模組的記憶體中查詢自然較慢)
可共享性:前者不可共享,也就是說如果兩個EXE使用了同一個靜態庫,那麼實際在記憶體中存在此庫的兩份拷貝,而後者是可共享的。
可升級性:前者不可升級(因為靜態庫符號已經編入EXE中,要升級則EXE也需要重新編譯),後者可以升級(只要介面不變,DLL即可被升級為不同的實現)
綜合以上,選擇靜態庫還是DLL
1. 靜態庫適於穩定的程式碼,而動態庫則適於經常更改程式碼(當然介面要保持不變),當DLL更改(僅實現部分)後,使用者不需要重編工程,只需要使用新的Dll即可。
2. 由於靜態庫很吃可執行檔案的生成(Link期)時間,所以如果對可執行檔案的Link時間比較敏感,那麼就用DLL。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/hjsunj/archive/2008/01/16/2047376.aspx
相關文章
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- 靜態庫與動態庫
- iOS 靜態庫 與私有庫iOS
- linux下的靜態庫與動態庫Linux
- 動態連結庫與靜態連結庫
- C靜態庫的建立與使用--為什麼要引入靜態庫?
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- DLL動態庫動態載入
- 靜態域與靜態方法
- iOS 靜態庫詳解與開發iOS
- 靜態庫生成
- 動靜態庫
- ios靜態庫和動態庫iOS
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- JavaScript 靜態屬性與靜態方法JavaScript
- net 靜態方法與非靜態方法
- cmake:生成靜態庫和動態庫
- [Linux]動靜態庫Linux
- Linux共享庫、靜態庫、動態庫詳解Linux
- VS(visual studio) C++ 封裝dll,以及其隱式呼叫與顯式呼叫(靜態動態)C++封裝
- 【連結 1】與靜態連結庫連結
- iOS的Framework靜態庫iOSFramework
- 靜態資源公共庫
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- android下java的靜態庫和動態庫AndroidJava
- iOS動態庫和靜態庫的運用iOS
- VS中呼叫DLL動態庫的方法
- 一、靜態庫和動態庫,Makefile專案管理專案管理
- 簡述Linux下的靜態庫和動態庫Linux
- 動態連結庫(DLL)的建立和使用
- C++呼叫C#的動態庫dllC++C#
- CMake和靜態庫順序
- 資料庫靜態脫敏資料庫
- Linux 靜態庫生成及呼叫Linux
- 靜態路由原理與配置路由
- Android NDK祕籍--淺析靜態庫和動態庫Android
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- 筆記: 判斷lib庫是動態庫還是靜態庫筆記