2015-05-05 48 views
2

據我所知,大多數編程語言都有標準庫。我也理解許多庫使用其他庫中的函數和方法,並且在創建新庫時,程序員可以使用其他庫中的現有代碼。如何編寫最低級別的標準庫函數?

我的問題是,如何編寫最基本的庫函數?一般來說,許多其他庫,函數或代碼使用的函數。例如,將字符寫入屏幕的原始功能。這些基礎函數是用匯編寫成的嗎?

我是一個相對較新的CS學生,所以如果我沒有使用正確的語言,我很抱歉。

+0

像控制檯IO使用操作系統特定的API調用;操作系統如何實現這些API函數將會有所不同。 – OMGtechy

+0

這個問題不是板子? – user3528438

+0

在幾乎所有的現代操作系統中,屏幕輸出都是用C或C++編寫的,但是會與硬件進行一些交互,無論是將字節插入基於文本的幀緩衝區,還是將文本存儲在串行端口FIFO中以發送出去「傳輸」線,或者將可變寬度字體寫入圖形顯示器(如果不是數千行代碼,則可能是數百)的複雜性。究竟是如何工作取決於硬件是如何工作的...... –

回答

1

動態庫(.dll在視窗)是完全一樣實際上是一個可執行文件(.exe在視窗)兩者都在相同的文件格式,PE格式(可移植可執行) 的不同的是,動態庫並沒有通過它自己的「開始」執行(你通常不包括它的文件中的入口點)

所以一個動態庫就像一個EXE(都有代碼和數據),至於操作系統核心庫如user32.dll和kernal32.dll ntdll.dll(在Windows的情況下),它們是在構建每個可執行文件(其中大多數都使用c/C++)時構建的,無論您的編程平臺如何(.net/native c /組裝),你的程序必須調用這些庫中的函數來「連接到世界」,我們來看一個例子。當你讓你的C++程序在屏幕上顯示一條消息時,你通常通過調用C++標準庫中的一個函數來實現該功能,該函數又調用OS函數,然後調用硬件驅動程序「知道如何」顯示該機器的特定屏幕上的消息。

,所以如果你想定義你的編程請求都將拋層,這將是:在C++標準庫庫

  1. 的函數的調用。

  2. 調用用戶模式操作系統庫。

  3. 調用內核模式操作系統庫。

  4. OS調用,當你想在屏幕上顯示「任何」,即與輸出(如屏幕的硬件驅動程序。

不認爲大會作爲語言它可以做任何事情,你的C++代碼實際上是一個編譯後的彙編/二進制代碼 - 除非它是一個類似.net或java的虛擬機,它需要在頂部增加一個層

什麼使OS庫很重要,他們只是「知道」如何處理操作系統,因爲他們知道操作系統數據結構究竟在哪裏。

1

在C和C++語言中,庫函數通常用C或C++編寫,然後編譯。它也用於測試編譯器。

出於性能或空間的原因,某些編譯器供應商可能會使用匯編語言編寫庫(以高級語言編譯後)。

一個典型的例子是memcpy函數。它將被彙編寫入以利用處理器的塊複製指令。

某些語言使用其他語言編寫其庫函數。例如,Java可以用C編寫它的JVM函數,讓它們工作,然後使用匯編語言對它們進行優化。

至於訪問平臺的東西,這取決於編譯器。有些平臺沒有屏幕。有些平臺要求商店編寫編譯器代碼執行的定製驅動程序(例如嵌入式系統)。一些庫函數調用操作系統中的函數。