理解C C 執行時庫

2021-08-16 22:55:32 字數 2163 閱讀 1928

執行時庫(runtime library)通俗的說就是我們的程式執行的時候所依賴的庫檔案,在windows平台這些庫由微軟提供,並且是以2種形式提供:靜態庫(lib)動態庫(lib+dll)。每個庫還都提供debugrelease2個版本。

c/c++執行時庫從形式上來講和我們自己開發的靜態庫、動態庫沒什麼兩樣,只是它們由微軟開發和維護,並提供了一些常用的功能支援(如malloc,free,printf等等),如果我們的程式需要使用這些功能(事實上,只要是c/c++程式就一定會用到執行時庫提供的功能),就要鏈結c/c++執行時庫。我們可以自主選擇是鏈結「靜態庫」還是「動態庫」,是鏈結「debug版本」的還是「release版本」的。

大家可能注意到我們在平時開發中從來沒有顯式的來鏈結這些庫,這是為什麼了?

因為我們的編譯器為我們提供了便利,我們只需要向編譯器指定特定的編譯選項(如mt、md、mtd、mdd),編譯器就會自動鏈結對應的庫。

同時,編譯器會根據mtmd來定義相應的預處理巨集: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***.dllmsvcprt.lib+msvcp***.dll

mddmulti-threaded dll debug

debug版的多執行緒動態庫

msvcrtd.lib + msvcr***d.dllmsvcprtd.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...