談論Linux內核時,「stack hog」是什麼意思?什麼是「stack hog」
我在一些linux內核書籍(Wolfgang Mauerer專業Linux內核架構)上讀到了這個概念,但是「stack hog」究竟意味着什麼?謝謝。
談論Linux內核時,「stack hog」是什麼意思?什麼是「stack hog」
我在一些linux內核書籍(Wolfgang Mauerer專業Linux內核架構)上讀到了這個概念,但是「stack hog」究竟意味着什麼?謝謝。
「Stack hog」是一個非正式名稱,用於描述使用大量自動存儲(AKA「堆棧」)的函數。什麼算作「Hogging」因執行環境而異:一般來說,內核級函數對堆棧空間有更嚴格的限制 - 只有幾個千字節,所以在內核模式下被認爲是「堆棧豬」的函數可能會變成「好公民「在用戶模式。
函數成爲堆棧宏的一個常見原因是在自動內存中分配緩衝區或其他數組。這樣更方便,因爲您不需要記住釋放內存並檢查分配的結果。您也可以在分配本身上保存一些CPU週期。缺點是堆棧溢出的可能性,導致內核級程序恐慌。這就是爲什麼「堆棧」的常見補救措施是將一些緩衝區移動到動態內存中。
Linux內核使用4K堆棧。使用過多的小空間被認爲是豬。如果你是「懶惰」的並且在堆棧上分配一個緩衝區或者有一個具有大量參數的函數。
堆棧必須保存系統調用所需的任何調用序列以及可能調用的任何中斷處理程序。所以節省堆棧空間非常重要。
linux內核默認每個進程使用8K的內核棧 – c4f4t0r
歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。 「堆棧豬」將是一個使用過量堆棧空間的進程 - 幾乎可以肯定。您對Google(或您最喜愛的搜索引擎)進行了多少研究?例如,'linux stack hog'似乎在Stack Exchange網站上收集了很多問題。 –