【学习笔记】1. 栈的基本知识

1. 什么是栈

1.1 栈

栈的做用域是进程。
在介绍栈以前,咱们先来看下进程的结构html

clipboard.png

注 : stack 就是进程中的栈区域。函数

1.2 栈的做用范围

栈是C语言运行的基础。进程在运行时,能够不适用堆,可是必须使用栈。学习

栈主要做用于如下几个方面.spa

  • 函数参数
  • 局部变量
  • 函数返回值
  • 编译器生产的临时变量

1.3 栈指针

通常用 FP SP 来指向指针

栈通常是满减栈,FP 指向栈顶,SP 指向栈底。FP-SP 之间就是整个栈的大小。code

跳转函数,经过移动FP,SP指针来从新划分新的栈。视频

1.4 栈的大小

能够经过如下命令查询和设置htm

ulimit -s

ulimit -s size (经过size 来设置,可是调高堆栈容量,会增长内存开销和启动时间)

栈的大小通常是8M (8192k)blog

定义一个 8M大小的栈,会溢出进程

clipboard.png

clipboard.png

若是加大栈的空间大小,就能够正常的运行

clipboard.png

2. 栈在内存中的map

咱们经过查看当前运行进程,查看一下栈的分布地址

self 是当前进程
cd /proc/self/

cat maps

clipboard.png

3. 栈溢出

如前面所述,在最大栈帧内,栈能够动态扩展

超过最大值,就会发生栈溢出,产生段错误

4. 栈帧

clipboard.png

clipboard.png

栈帧通俗的说,就是栈的范围。
好比第一个是 main 函数的栈帧区域, 包括 FP 和 LR
还有局部变量 函数参数 临时存储区

关于栈帧的使用,我会经过后续的一篇文章,来介绍在函数的调用过程当中,栈帧是如何工做的。

100. 致敬

若有不详,请参考王老师的精彩讲解 堆栈管理
学习过程当中,得到了极大的知足感,把以前的一些东西串联了起来。十分感谢 王利涛老师
在此表示感谢。
PS:本文中全部的资源和图片均来自视频中
另外十分推荐一本书 深刻理解计算机系统

相关文章
相关标签/搜索