推薦閱讀dietlibc源代碼

參考網址http://sunxiunan.com/?p=1626
推薦閱讀dietlibc源代碼

一般計算機專業的都學過C語言,至少我們那時候是這樣的,那時候我們寢室老六一句名言:C語言無所不能。這話想想其實還真沒錯,C語言寫出了各種操作系統,寫出了Python、Lua、Ruby這樣的編程語言,寫出了大量的大中小型程序,最近一個月的TIOBE編程語言排行,C語言這杆老槍甚至又搶回頭名,把Java趕下臺。

C語言一般是學K&R,http://en.wikipedia.org/wiki/The_C_Programming_Language_%28book%29,當然也有人用譚浩強那本,但是無論哪一本都會介紹C語言的標準庫。

之所以稱之爲標準庫,是因爲在大多數實現了C語言編譯器的操作系統上都包含了這些庫函數的實現,最常見的如printf, malloc, free等,它們都是庫函數。image

好吧,你有沒有像我一樣,曾經好奇過這些庫函數是如何實現的呢?

一般這些庫函數都是由操作系統作者編寫,當你在自己的程序中調用這些函數如printf,就會將標準庫中的函數鏈接到你的程序中,我說的不是很準確,具體的過程可以參考linker and loader這本書,或者是《程序員自我修養》這本。

好在我們有了開源的標準庫實現,就是glibc(注意不是glib,那是另外一個東西了)http://en.wikipedia.org/wiki/Glibc,下載了glibc的代碼,你就會找到裏面對這些神奇的函數的具體實現,當然,類似malloc這樣的函數複雜的要命。比如

http://fxr.watson.org/fxr/source/stdlib/malloc.c?v=FREEBSD-LIBC

就是FreeBSD的malloc的實現(malloc.c)

http://fxr.watson.org/fxr/source/stdlib/qsort.c?v=FREEBSD-LIBC 這個是qsort函數的實現。都比較複雜。

這時候,就要隆重介紹我要推薦的主角了,它就是dietlibc,一個非常精簡的C標準庫實現,用於C語言學習非常適合,而且代碼寫的也很清晰,至少比glibc清晰多了,原因也很簡單,因爲glibc要做大量的取捨平衡速度優化,裏面自然存在不少醜陋的代碼。

http://www.fefe.de/dietlibc/

我寫這篇文章時,dietlibc的最新版是0.32,大約是09年5月底發佈的,我下載的壓縮包大概是580KB左右。解壓以後,可以找到這個目錄dietlibc-0.32\lib,裏面就是C標準庫函數的實現代碼。malloc的代碼是在alloc.c中,qsort的實現大概50行左右,也比FreeBSD的簡單多了。

在www.fefe.de這個頁面還可以發現大量C語言相關的項目,涉及到各個方面,用來C語言編程學習是非常有幫助的。

發佈了42 篇原創文章 · 獲贊 23 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章