函數庫調用是語言或應用程序的一部分,而系統調用是操做系統的一部分。函數
系統調用是在操做系統內核發現的一個「trap」或中斷後進行的。性能
函數庫調用 | 系統調用 |
---|---|
在全部的ANSI C編譯器版本中,C函數庫是相同的 | 各個操做系統的系統調用是不一樣的 |
它調用函數庫中的一個程序 | 它調用系統內核的服務 |
與用戶程序相聯繫 | 是操做系統的一個進入點 |
在用戶地址空間執行 | 在內核地址空間執行 |
它的運行時間屬於「用戶」時間 | 它的運行時間屬於「系統」時間 |
屬於過程調用,開銷較小 | 須要在切換到內核上下文環境而後切換回來,開銷較大 |
在C函數庫libc中有大約300個程序 | 在UNIx中有大約90個系統調用(MS-DOS中少一些) |
記錄於UNIX OS手冊的第三節 | 記錄於UNIX OS手冊的第二節spa |
典型的C函數庫調用:system,fprintf,malloc | 典型的系統調用:chidr,fork,write,brk |
庫函數調用一般比行內展開的代碼慢,由於它須要付出函數調用的開銷。但系統調用比庫函數調用還要慢不少,由於它須要把上下文環境切換到內核模式。在SPARC工做站上,對一個庫函數調用進行記時,結果大約是半微秒。系統調用所須要的時間大約是庫函數調用的70倍(35微秒)。純粹從性能上考慮,你應該儘量地減小系統調用的數量。可是,許多C函數庫中的程序經過系統調用來實現功能。操作系統
摘自:《C語言專家》ci