老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx

老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx

ID:57673296

大小:292.44 KB

页数:6页

时间:2020-08-31

老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx_第1页
老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx_第2页
老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx_第3页
老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx_第4页
老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx_第5页
资源描述:

《老九学堂【C++】存取区域细节(寄存器、栈、堆栈).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、【C++】存取区域细节(寄存器、栈、堆栈)在弄清楚C++程序存取区域之前咱们先对硬件有一个大致的回顾。我们都知道,在计算机中CPU用于执行操作指令。内存用于缓存操作系统需要处理的指令。也就是说程序的执行阶段,通常需要CPU和内存联合参与。CPU:内存:那么CPU和内存具体是怎么交互的呢。这里会涉及到一个细节。CPU本身存在一个数据的缓冲区域。在C/C++程序中我们称之为寄存器。CPU是先从内存中读取极小的一部分数据缓存到寄存器中开始执行的。到此大家大概对寄存器的概念有一个大致的了解。如下图:对这些概念大概了解之后,咱们来简单了解

2、一下C/C++程序本身的的结构。可执行程序的文件结构:从图中我们可以看到。整个程序文件大致分成三个部分。由下到上,分别有符号起始段(BBS)、数据段、以及代码段。下面分别堆三个部分做简单阐述。·1.符号起始段(BBS)。BBS的全称是BlockStartedbySymbol.这个区域主要用于存放程序中未初始化的全局变量。·2.数据段(Data)。用于存储程序中已经初始化的全局变量的区域·3.程序段/代码段(Text).用于存储可执行代码的一个区域。大小已经确定。因为程序执行时,代码已经编译结束。对于这个三个部分。我们可以使用gc

3、c自带的nm命令查看程序本身的区域。比如我们有一个demo.exe。则可以使用如下命令在控制台中查看。1nmdemo.exe命令执行结束后得到下文结果,注意此处我们只关注数据输出行第二列以及第三列的名称。其他信息我们不做关注。并且这里咱们去掉一部分输出。我们这里看到的B/D/T以及bbs/Data/Text即符号起始段/数据段/代码段。那么计算机把这些程序加载到内存中又是怎么回事呢。首先代码起始段的数据会存储到一个BBS区域。Text部分的数据也会存储在一个代码区域。然后对于数据段的数据。程序会详细的处理。分别放在静态数据区、堆

4、、栈当中。如下图所示。1.静态数据区存放的数据即我们在代码中使用static关键字定义的变量。2.栈中存放的数据即使用大括号包裹{}并且没有使用static关键字修饰的变量数据。函数中局部变量通常放在栈内存中。3.堆中存放的数据即使用动态内存分配方式得到的数据。如使用new关键字或者使用malloc、calloc、realloc等函数申请的内存空间。关于堆和栈数据结构在栈中数据是使用先进后出的方式存储。比如打印机的纸箱中的纸张。最后放入盒子中的纸,总是第一个被打印机使用。在堆内存中的数据是无序的。其具体分配方式我们此处不做说明。

5、关于进栈和出栈所谓进栈,即CPU把寄存器中的数据向占栈内存中存放的过程。出栈,即CPU把占内存数据的顶部数据加载到寄存器的过程。总结:笔记中主要阐述了C/C++程序文件本身的结构。以及加载到内存中之后的数据结构。最后对堆栈数据结构以及进栈出栈概念做了一个简单的阐述。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。