Linux-Kernel

為什麼 Linux 核心沒有像 glibc 那樣優化的函式(例如,memchr、strchr)?

  • February 14, 2020

自己嘗試實現C字元串庫的時候,發現glibc和Linux核心實現一些功能的方式不同。例如,glibc memchrglibc strchr使用一些技巧來加速函式,但核心 memchr核心 strchr沒有。為什麼 Linux 核心函式不像 glibc 那樣優化?

核心在特定於架構的目錄中確實具有其中一些功能的優化版本;例如,參見 x86 實現memchr(參見所有memchr定義所有strchr定義)。您找到的版本是備份通用版本;你可以通過尋找保護檢查來發現這些,#ifndef __HAVE_ARCH_MEMCHRformemchr#ifndef __HAVE_ARCH_STRCHRfor strchr

C 庫的優化版本確實傾向於使用更複雜的程式碼,所以上面並沒有解釋為什麼核心不竭盡全力加快速度。如果您能找到核心將從這些功能之一的更優化版本中受益的場景,我想一個更新檔會受到歡迎(有適當的支持證據,並且只要優化的功能仍然可以理解 - 請參閱關於memcpy)。但是我懷疑核心對這些函式的使用通常不會讓它變得值得。例如memcpy,相關函式往往用於核心中的小緩衝區。並且永遠不要低估適合記憶體或可以內聯的短函式的速度增益……

此外,正如Iwillnotexist Idonotexist所提到的,MMX 和 SSE 不能輕易地在核心中使用,許多記憶體搜尋或複制功能的優化版本都依賴於它們。

在許多情況下,無論如何,使用的版本最終都是編譯器的內置版本,並且這些都經過大量優化,甚至比 C 庫的版本還要好(例如,memcpy通常會轉換為寄存器載入和儲存,或者甚至是一個固定的商店)。

引用自:https://unix.stackexchange.com/questions/566981