C/C++静态存储区、动态存储区、代码区在内存的存储位置
相关问题:
1. 运行一个C++程序,系统会为程序安排哪几片存储区域?分别存放什么?
- 静态区(全局区):存放静态变量(包括静态数据成员);
- 栈:存放局部非静态变量、函数的形式参数;
- 程序区:存放机器语言的程序代码;
- 堆:系统掌握的未分配的内存区。用于存放动态分配的对象, 当你使用 _malloc_和_new_等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你能够 free和delete它们。
- 注:形参是变量,发生函数调用时在栈中安排这些变量的存储空间。
2. 例题:
画出如下程序运行到return之前的内存图,图中要表示出各个变量、对象以及main函数的位置。
答案:
程序的运行过程说明:
- 从EXE文件中把机器语言代码调入内存的程序区
- x是全局变量,随着程序被调进内存就安排了内存空间,在静态区,并以2000、1、2为实际参数调用构造函数,初始化x的各个数据成员
- 系统调用main,这是每个C++程序的必有步骤
- 进入main内部
- 创建局部对象y,在动态区,并以1988、3、4为实际参数调用构造函数,初始化y
- 安排局部变量q,是指针变量,在动态区中安排
- 创建无名对象,在堆中安排,并以2020、5、6为实际参数调用构造函数
- 开始执行调用我们后来在程序的空行加上去的那条语句x.Show( )
- 入口参数传递,把x的地址传递给Show函数,使得Show函数中的this就是该地址
- 进入Show内部执行,显示
- 从Show返回
- 执行main的return,返回系统
对比表格:
堆和栈的对比表格 全局/静态存储区和常量存储区的对比
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yrian's Blog!
评论