1.序言
今天某同事突然問我:我在Linux上寫了一個測試程序,在函數內部定義了一個很大的數組,一運行就 Segmentation fault.
當時一想肯定是棧溢出了。其實這樣說也不準確,還是決定去看內核代碼,其實內核對用戶進程是有資源限制的。
2.task_struct
既然是跟進程相關,那麼首先得想到進程相關的數據結構task_struct,查找資源限制相關的結構,task_struct裏面有這麼個結構 struct signal_struct *signal。信號相關裏面又包含對資源的限制struct rlimit rlim[RLIM_NLIMITS];
3./proc文件系統
也可以從/proc文件系統查看到進程棧空間大小的限制。
cat /proc/self/limits
NOTE:算一下應該是8M的樣子,其實棧空間已經很大了。
如果把局部數組設置成該值,鐵定崩潰。
I.後記
出了問題不用怕,去尋根問底就好。總能找到你所需要的答案。