栈的做用域是进程。
在介绍栈以前,咱们先来看下进程的结构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:本文中全部的资源和图片均来自视频中
另外十分推荐一本书 深刻理解计算机系统