執行時庫(runtime library)通俗的說就是我們的程式執行的時候所依賴的庫檔案,在windows平台這些庫由微軟提供,並且是以2種形式提供:靜態庫(lib)
、動態庫(lib+dll)
。每個庫還都提供debug
、release
2個版本。
c/c++執行時庫從形式上來講和我們自己開發的靜態庫、動態庫沒什麼兩樣,只是它們由微軟開發和維護,並提供了一些常用的功能支援(如malloc
,free
,printf
等等),如果我們的程式需要使用這些功能(事實上,只要是c/c++程式就一定會用到執行時庫提供的功能),就要鏈結c/c++執行時庫。我們可以自主選擇是鏈結「靜態庫」還是「動態庫」,是鏈結「debug版本」的還是「release版本」的。
大家可能注意到我們在平時開發中從來沒有顯式的來鏈結這些庫,這是為什麼了?
因為我們的編譯器為我們提供了便利,我們只需要向編譯器指定特定的編譯選項(如mt、md、mtd、mdd
),編譯器就會自動鏈結對應的庫。
同時,編譯器會根據mt
和md
來定義相應的預處理巨集:mt
對應_mt巨集
,md
對應_md巨集
。
例如,我們通過visual studio
開發c/c++程式時,在工程屬性中配置「執行庫」為mt、md、mtd、mdd
中的乙個:
就相當於間接的向編譯器指定編譯選項和定義相應的巨集。
下表列出各種編譯選項的含義以及對應的庫檔案:
型別全稱
含義對應的庫檔案
備註ml
single-threaded
release版的單執行緒靜態庫
libc.lib
從vs2005起被廢棄
mldsingle-threaded debug
debug版的單執行緒靜態庫
libcd.lib
從vs2005起被廢棄
mtmulti-threaded
release版的多執行緒靜態庫
libcmt.lib
mtdmulti-threaded debug
debug版的多執行緒靜態庫
libcmtd.lib
mdmulti-threaded dll
release版的多執行緒動態庫
msvcrt.lib + msvcr***.dll
msvcprt.lib+msvcp***.dll
mddmulti-threaded dll debug
debug版的多執行緒動態庫
msvcrtd.lib + msvcr***d.dll
msvcprtd.lib + msvcp***d.dll
如果計算機上安裝了多個版本的vc++執行環境(或者多個版本的visual studio),則相同名稱的lib或dll就會存在多份。如msvcrt.lib
檔案:
msvcr100d.dll
為例:
ms = microsoft
v = visual
c = c program
r = run-time
100 = version
d = debug (不帶d即為release版本)
msvcp100d.dll
為例:
ms = microsoft
v = visual
cp = c
plus
plus 即c++
100 = version
d = debug (不帶d即為release版本)
C C 執行時庫 解釋
i.crt crt c c runtime library 是支援c c 執行的一系列函式和 的總稱。雖然沒有乙個很精確的定義,但是可以知道,你的main就是它負責呼叫的,你平時呼叫的諸如strlen strtok time atoi之類的函式也是它提供的。我們以microsoft visual.n...
C C 執行時庫堆記憶體分析
3.crtheap堆 4.靜態crt庫帶來的影響 5.總結 在c c 語言中,我們知道記憶體分為這幾種 程式全域性變數記憶體。棧記憶體。堆記憶體。其中堆記憶體就是通過malloc new 來分配的記憶體,本文我們來 一下堆記憶體的分配過程。對記憶體的使用非常簡單,如下就可以正常使用 int p in...
C C 執行時的種類
一 c c 執行時的種類 vc 完美的支援c和c 標準,因此也就按照c和c 標準定義的函式原型實現了上述執行時庫。為了方便有不同需求的客戶使用,vc 分別實現了動態鏈結庫dll版本和靜態鏈結庫lib版本。同時為了支援程式除錯且不影響程式的效能,又分別提供了對應的除錯版本。除錯版本的名稱在releas...