當
C runtime 函數庫於20世紀70年代產生出來時,PC 的內存容量還很小,多任務是個新奇的觀念,更別提什麼多線程了。所以以當時產品爲基礎所演化的 C runtime 函數庫在
多線程(multithreaded)的表現上有嚴重問題,沒法被多線程程序使用。
利用各類同步機制(synchronous mechanism)如 critical section、mutex、semaphore、event,能夠從新開發一套支持多線程的 runtime 函數庫。問題時,加上這樣的能力,可能致使程序代碼大小和執行效率都遭受不良波及——即便你只激活了一個線程。
Visual C++ 的折衷方案是提供兩種版本的 C runtime 函數庫。一種版本的給單線程程序使用,一種版本給多線程程序使用。多線程版本的重大改變是,第一,變量如 errno 者如今變成每一個線程各擁有一個。第二,多線程版中的數據結構以同步機制加以保護。
Visual C++ 一共有六個 C runtime 函數庫產品供你選擇:
一、
Single-Threaded (static) libc.lib 898,826
二、
Multithreaded (static) libcmt.lib 951,142
三、
Multithreaded DLL msvcrt.lib 5,510,000
四、
Debug Single-Threaded (static) libcd.lib 2,374,542
五、
Debug Multithread (static) libcmtd.lib 2,949,190
六、
Debug Multithreaded DLL msvcrtd.lib 803,418
Visual C++ 編譯器提供下列選項,讓咱們決定使用哪個 C runtime 函數庫:
一、
/ML Single-Threaded (static)
二、
/MT Multithreaded (static)
三、
/MD Multithreaded DLL (dynamic import library)
四、
/MLd Debug Single-Threaded (static)
五、
/MTd Debug Multithreaded (static)
六、
/MDd Debug Multithreaded DLL (dynamic import library)