当前位置: 首页 > Linux

【学习笔记】一、栈的基础知识

时间:2023-04-06 21:44:50 Linux

1.什么是栈1.1栈的范围是进程。在介绍栈之前,先看一下进程的结构注意:栈是进程中的栈区。1.2栈的范围栈是C语言运行的基础。一个进程在运行的时候,可以不用堆,但是一定要用栈。栈主要用在以下几个方面。函数参数、局部变量、函数返回值、编译器产生的临时变量1.3栈指针一般用FP指向栈SP一般是全减栈,FP指向栈顶,SP指向栈底。FP-SP之间是整个栈的大小。跳转函数通过移动FP和SP指针对新堆栈进行重新分区。1.4栈的大小可以通过以下命令查询和设置ulimit-sulimit-ssize(按大小设置,但增加栈容量会增加内存开销和启动时间)栈的大小一般为8M(8192k)定义一个大小为8M的栈会溢出。如果栈的空间大小增加,它可以正常运行。2.栈在内存中的映射。我们可以通过查看当前运行的进程来查看栈的分配地址。self是当前进程cd/proc/self/catmaps3。栈溢出上面说到,在最大栈帧内,栈可以动态扩展超过最大值,就会发生栈溢出,导致段错误。4.栈帧栈帧就是栈的范围。比如第一个是main函数的栈帧区,包括FP和LR,还有局部变量函数参数暂存区。关于栈帧的使用,我会通过后续的文章介绍函数调用时的栈帧。框架如何工作。100.致敬不知道的请看王老师的精彩讲解在栈管理的学习过程中,我获得了极大的满足感,把之前的一些东西联系到了一起。非常感谢王立涛先生。谢谢你。PS:本文所有资源和图片均来自视频。另一本非常推荐的书是《深入理解计算机系统》