C/C++ 您当前所在位置:首页 > C/C++ > 堆栈的说明

堆栈的说明

陈成 陈成 2020-07-02 20:37:27 C/C++ 144人已围观

简介 我们知道不管寄存器还是内存都是用来存储一些数据的。打个比方,如果我需要临时存储一些数据,用完就丢弃。如果数据少,当然可以放在寄存器里,但如果很多呢,10个?20个?所以我们就用内存来存储这些数据。不仅如此,还得要能记录我存了多少数据,并且我要用数据你还能快速的找到它。于是前辈们就这样来设计内存能满足我们的需求。

我们知道不管寄存器还是内存都是用来存储一些数据的。打个比方,如果我需要临时存储一些数据,用完就丢弃。如果数据少,当然可以放在寄存器里,但如果很多呢,10个?20个?所以我们就用内存来存储这些数据。不仅如此,还得要能记录我存了多少数据,并且我要用数据你还能快速的找到它。于是前辈们就这样来设计内存能满足我们的需求。

使用两个寄存器,比如就叫bottom和top。寄存器bottom存一个地址,记录起始地址,寄存器top存一个地址,记录结束地址。当存入数据的时候,top向上减一格,如下图。

初始状态

初始.png

存入一个数据1后的状态

存入数据.png

这样的话我们就可以想存多少存多少。并且还知道一共存了多少,top和bottom有多少距离就有多少数据。

在windows分堆栈的时候是越往上越小,也就是从大的地址慢慢往小的分,所以我们要想找到1有两种办法,一是bottom减去偏移,一是top加上偏移,这样就又满足了快速找到数据的需求。

当我们用完后不要了怎么办?很简单,我们将top的值加上一个就行

还原.png

这样就非常方便的将那个值丢弃了。

堆栈是由操作系统来维护,一般做开发的程序员是不用管的,如果你喜欢分析底层,逆向别人的软件什么,这个必须要知道。

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计