




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C++浅析内存分区模型概念与示例目录初识C++内存分区模型程序运行前内存分区代码示例
初识C++内存分区模型
在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有不同的生命周期,从而会让程序员的编程变得更加灵活。
我们这次讨论的内存模型是将内存划分为四部分的版本,也是笔者在和黑马学习过程中学习到的版本。
而C++在程序运行的过程中,将内存分为四个区域:
存放函数的二进制代码,即CPU执行的机器指令,由操作系统进行管理。
存放全局变量、静态变量(static,分为全局与局部静态变量)和部分常量。
由编译器自动分配和释放,存放函数的参数值、局部变量、局部常量等。
由程序员进行分配和释放,而如果程序员不释放,则在程序结束运行时,由操作系统来进行回收。
程序运行前
程序编译后,会生成可执行程序,而在该程序未执行之前,内存分为代码区和全局区两个区域。
代码区
存放函数的二进制代码,即CPU执行的机器指令,由操作系统进行管理。
代码区的特性是共享与只读:
共享:对于被频繁执行的程序,在内存中只需要保存一份代码即可。只读:防止程序被意外修改。
全局区
存放全局变量、静态变量(static)和部分常量。
其中部分常量为常量区,即字符串常量和全局常量(const关键字修饰的全局常量);不包括局部常量。
栈区
由编译器自动分配和释放,存放函数的参数值、局部变量、局部常量等。
堆区
由程序员进行分配和释放,而如果程序员不释放,则在程序结束运行时,由操作系统来进行回收。
主要利用new在堆区开辟内存,由delete进行释放。
ps:利用new常见的数据,返回的是该数据对应类型的指针。
内存分区代码示例
#includeiostream
usingnamespacestd;
//全局变量全局区
intglobal_a=10;
intglobal_b=20;
//全局常量全局区
constintglobal_const_a=10;
constintglobal_const_b=20;
//全局静态变量全局区
staticintstatic_global_a=10;
staticintstatic_global_b=20;
//形参栈区
voidfunc(inta){
//局部变量栈区
intb=20;
cout"函数func()的形参a的地址为:"aendl;
cout"函数func()的局部变量b的地址为:"bendlendl;
intmain(){
cout"栈区"endl;
//局部变量栈区
inta=10;
intb=20;
cout"局部变量a的地址为:"aendl;
cout"局部变量b的地址为:"bendl;
//局部常量栈区
constintconst_a=10;
constintconst_b=10;
cout"局部常量const_a的地址为:"const_aendl;
cout"局部常量const_b的地址为:"const_bendl;
//形参栈区
func(a);
cout"全局区"endl;
cout"全局变量global_a的地址为:"global_aendl;
cout"全局变量global_b的地址为:"global_bendl;
cout"全局常量global_const_a的地址为:"global_const_aendl;
cout"全局常量global_const_a的地址为:"global_const_bendl;
cout"全局静态变量static_global_a的地址为:"static_global_aendl;
cout"全局静态变量static_global_b的地址为:"static_global_bendl;
//局部静态变量全局区
staticintStatic_a=10;
staticintStatic_b=20;
cout"局部静态变量Static_a的地址为:"Static_aendl;
cout"局部静态变量Static_b的地址为:"Static_bendl;
//字符串常量全局区
cout"字符串常量的地址为:""helloworlds1"endl;
cout"字符串常量的地址为:""helloworlds2"endlendl;
cout"堆区"endl;
//new堆区
int*new_a=newint(10);
int*new_b=newint(2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《发展汉语》综合教材的人物体系及其文化传播研究
- 基于深度学习的羊只体尺体重获取方法研究
- 不同重金属胁迫下聚合草的转录组分析及关键基因筛选
- 餐饮食品安全卫生管理证明书(7篇)
- 小学六年级数学知识回顾计划
- 教师继续教育与职业生涯规划的关系
- 咖啡师职业技能提升计划与总结范文
- 2024-2025学年粤教版三年级科学实验室建设计划
- 一年级下册科学教育游戏计划
- 道路施工的生态保护与文明施工措施
- 产程中人文关怀精选课件
- 人力资源工作时间节点表
- 2021年高考地理真题试卷(广东卷)含答案
- XMT温度控制仪说明书
- 19QAKE质量保证关键要素(Quality Assurance Key Elements)稽核手册
- 下土地岭滑坡稳定性分析及风险计算
- 【小升初】北师大版2022-2023学年安徽省安庆市怀宁县六年级下册数学期末试卷(一)含解析
- 水文专业有偿服务收费管理试行办法(附收费标准)(共42页)
- 篮球--------原地单手肩上投篮 课件(19张幻灯片)
- 肺癌患者护理查房--ppt课件
- 《北京市房屋建筑和市政基础设施工程竣工验收管理办法》(2015年4月1日起实施)
评论
0/150
提交评论