VS中的多執行緒(/MT)、多執行緒除錯(/MTd)、多執行緒DLL(/MD)、多執行緒除錯DLL(/MDd)的區別
一種語言的開發環境往往會附帶有語言庫,這些庫就是對作業系統的API的包裝,我們也稱這些語言庫為執行庫
對於MSVC的執行庫(CRT),按照靜態/動態連結,可以分為靜態版和動態版;按照除錯/釋出,可以分為除錯版本和釋出版本;按照單執行緒/多執行緒,可以分為單執行緒版本和多執行緒版本(但是目前VS中已不提供單執行緒版本了)
在除錯模式下,使用除錯執行庫:多執行緒除錯(/MTd)、多執行緒除錯DLL(/MDd)
在釋出模式下,使用釋出執行庫:多執行緒(/MT)、多執行緒DLL(/MD)
除錯模式下執行庫帶d,但釋出模式不帶。除錯與釋出的區別在於,釋出模式省略了程式的除錯資訊,簡單來說就是刪除了除錯模式下的用於除錯的內容,所以一般情況下,釋出模式下生成的可執行檔案的大小比除錯模式下生成的要小
靜態連結:多執行緒(/MT)、多執行緒除錯(/MTd)
動態連結:多執行緒DLL(/MD)、多執行緒除錯DLL(/MDd)
動態連結為D,靜態連結為T。兩者的區別在於,靜態連結將程式所依賴的執行庫整合到了可執行檔案中,可執行檔案執行時不再需要執行庫;動態連結沒有把程式所依賴的執行庫整合到可執行檔案中,可執行檔案執行時需要執行庫。由於靜態連結將程式所依賴的執行庫整合到了可執行檔案中,一般情況下,生成的可執行檔案的大小大於動態連結生成的
對這四種執行庫的選在位於VS的專案屬性-》C/C++-》程式碼生成-》執行庫:
例項
原始碼:
-
#include <iostream>
-
using namespace std;
-
int main()
-
{
-
cout << "Hello World!" << endl;
-
system("pause");
-
return 0;
-
}
(以下實驗均在Win10+VS2017下完成)
Win32、debug模式下:
Win32、release模式下:
我們可以發現,在同種模式下,動態連結小於靜態連結;在同種連結下,release模式小於debug模式
在x64、debug模式下:
在x64、release模式下:
同種模式和連結下,x64下生成的可執行檔案大小大於Win32下生成的