C++内存管理机制

C++中的内存管理

 

1. Linux中程序的内存地址分配

 

 

 

其中上面的地址为高位地址,下面的地址为低位地址。下面分别介绍各个内存区域的作用:

l 代码段:存放函数体的二进制代码;

l Bss段:存放未初始化的全局或静态数据;

l Data段:存放已初始化的全局或静态变量;

堆区:存放动态申请的内存,一般由new和malloc分配;

l 栈区:存放函数运行时的局部变量,函数参数,返回数据,返回地址等。

 

2. 堆和栈

 

 

l 栈:在函数调用时,第一个入栈的为参数,再是下一条汇编指令的地址,最后跳转到被调函数,被调函数分配本地变量所需的栈空间。函数执行完毕后,按相反的顺序出栈,最后根据压入的下一条汇编指令的地址返回到

调用者中,继续执行未执行的指令。

堆:操作系统中存在一个记录堆中空闲内存的链表,每次动态申请内存时,都会去访问该链表,选择相匹配的内存,同时将多余的内存还回链表,可以知道这样必然会产生碎片,调用delete时,会去访问动态申请的这块内存首地址记录的本次动态分配的内存大小,从而正确的释放当前分配的内存空间。

posted @   张杨  阅读(365)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示