棧的做用域是進程。
在介紹棧以前,咱們先來看下進程的結構html
注 : stack 就是進程中的棧區域。函數
棧是C語言運行的基礎。進程在運行時,能夠不適用堆,可是必須使用棧。學習
棧主要做用於如下幾個方面.spa
通常用 FP SP 來指向指針
棧通常是滿減棧,FP 指向棧頂,SP 指向棧底。FP-SP 之間就是整個棧的大小。code
跳轉函數,經過移動FP,SP指針來從新劃分新的棧。視頻
能夠經過如下命令查詢和設置htm
ulimit -s ulimit -s size (經過size 來設置,可是調高堆棧容量,會增長內存開銷和啓動時間)
棧的大小通常是8M (8192k)blog
定義一個 8M大小的棧,會溢出進程
若是加大棧的空間大小,就能夠正常的運行
咱們經過查看當前運行進程,查看一下棧的分佈地址
self 是當前進程 cd /proc/self/ cat maps
如前面所述,在最大棧幀內,棧能夠動態擴展
超過最大值,就會發生棧溢出,產生段錯誤
棧幀通俗的說,就是棧的範圍。
好比第一個是 main 函數的棧幀區域, 包括 FP 和 LR
還有局部變量 函數參數 臨時存儲區
關於棧幀的使用,我會經過後續的一篇文章,來介紹在函數的調用過程當中,棧幀是如何工做的。
若有不詳,請參考王老師的精彩講解 堆棧管理
學習過程當中,得到了極大的知足感,把以前的一些東西串聯了起來。十分感謝 王利濤老師。
在此表示感謝。
PS:本文中全部的資源和圖片均來自視頻中
另外十分推薦一本書 深刻理解計算機系統