C執行庫 二

2021-06-17 22:07:00 字數 1365 閱讀 7851

任何乙個c程式,它的背後都有一套龐大的**來進行支撐,以使得該程式能夠正常執行。這套**至少包括入口函式,及其所依賴的函式所構成的函式集合。當然,它還理應包括各種標準庫函式的實現。這樣的乙個**集合稱之為執行庫(runtime library)。而c語言的執行庫,即被稱為c執行庫(crt)。

如果擁有visual studio,可以在vc/crt/src裡找到乙份c語言執行庫的源**。然而,由於此源**過於龐大,僅僅.c檔案就有近千個,並且和c++的stl**一起毫無組織地堆放在一起,以至於實際上沒有什麼仔細閱讀的可能性。同樣,linux下的libc源**讀起來也如同啃磚頭。所幸的是,在本章的最後,我們會一起來實現乙個簡單的執行庫,讓大家更直觀地了解它。

乙個c語言執行庫大致包含了如下功能:

l           啟動與退出:包括入口函式及入口函式所依賴的其他函式等。

l           標準函式:由c語言標準規定的c語言標準庫所擁有的函式實現。

l           i/o:i/o功能的封裝和實現,參見上一節中i/o初始化部分。

l           堆:堆的封裝和實現,參見上一節中堆初始化部分。

l           語言實現:語言中一些特殊功能的實現。

l           除錯:實現除錯功能的**。

在這些執行庫的組成成分中,c語言標準庫佔據了主要地位並且大有來頭。c語言標準庫是c語言標準化的基礎函式庫,我們平時使用的printf、exit等都是標準庫中的一部分。標準庫定義了c語言中普遍存在的函式集合,我們可以放心地使用標準庫中規定的函式而不用擔心在將**移植到別的平台時對應的平台上不提供這個函式。

執行庫是平台相關的,因為它與作業系統結合得非常緊密。c語言的執行庫從某種程度上來講是c語言的程式和不同作業系統平台之間的抽象層,它將不同的作業系統api抽象成相同的庫函式。比如我們可以在不同的作業系統平台下使用fread來讀取檔案,而事實上fread在不同的作業系統平台下的實現是不同的,但作為執行庫的使用者我們不需要關心這一點。雖然各個平台下的c語言執行庫提供了很多功能,但很多時候它們畢竟有限,比如使用者的許可權控制、作業系統執行緒建立等都不是屬於標準的c語言執行庫。於是我們不得不通過其他的辦法,諸如繞過c語言執行庫直接呼叫作業系統api或使用其他的庫。linux和windows平台下的兩個主要c語言執行庫分別為glibc(gnu c library)和msvcrt(microsoft visual c run-time。

值得注意的是,像執行緒操作這樣的功能並不是標準的c語言執行庫的一部分,但是glibc和msvcrt都包含了執行緒操作的庫函式。比如glibc有乙個可選的pthread庫中的pthread_create()函式可以用來建立執行緒;而msvcrt中可以使用_beginthread()函式來建立執行緒。所以glibc和msvcrt事實上是標準c語言執行庫的超集,它們各自對c標準庫進行了一些擴充套件。

mysql vc執行庫 VC 執行庫安裝

vc 執行庫 visual c 可再發行程式包 是執行使用相應版本的 visual c 開發的應用程式時必要的元件。wampserver內建的apache mysql mariadb和php就依賴vc 執行庫,所以我們需要在電腦上安裝好vc 執行庫,否則無法正常使用wampserver。wampse...

執行庫實現

堆的實現 io與檔案操作 字串相關操作 格式化字串 helloworld程式無須用到的功能就不實現,比如異常 盡量簡化設計,盡量符合c 標準庫的規範 對於可以直接在標頭檔案實現的模組盡量在標頭檔案中實現,以免諸多的類 函式的宣告和定義造成 量膨脹,不便於演示 執行庫 要做到可以在windows和li...

編寫簡單的c執行庫(二)

在前面編寫簡單的c執行庫 一 中主要實現了呼叫main函式前的初始化 獲取引數和環境變數 退出程式等工作。接下來我們真正實現c標準庫中的一些函式 主要是檔案操作 字串操作函式 不過我們對這些函式的實現力爭簡單,對於效率方面考慮的不是很多,因為目的主要還是學習神秘的庫是怎麼實現的。1 檔案操作 c中的...