C/C++函數庫調用與系統調用的區別

    函數庫調用是語言或應用程序的一部分,而系統調用是操做系統的一部分。函數

    系統調用是在操做系統內核發現的一個「trap」或中斷後進行的。性能

函數庫調用vs.系統調用
函數庫調用 系統調用
在全部的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

相關文章
相關標籤/搜索