C/C++程序的内存开辟

文章介绍了C/C++程序内存的典型布局,包括向下增长的栈区,用于局部变量和函数调用;向上增长的堆区,由程序员管理的动态内存;数据段存放全局变量和静态数据;以及代码段存储函数的二进制代码。内存映射段则涉及文件映射和动态库。
摘要由CSDN通过智能技术生成

由图可见,左侧为代码,右侧则为我们模拟出来的内存格式。从上到下依次为:内核空间、栈、内存映射段、堆、数据段和代码段。

其中,内核空间是我们用户代码无法编写的部分,所以暂时不讨论。

栈区(stack),它是向下增长的,在执行函数的时候,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存有限。栈区主要存放的是运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

内存映射段则是用来进行文件映射,动态库、匿名映射等操作的。

堆区(heap),与栈区相反,它是向上增长的,其中存储的是由程序员分配与释放的空间,若程序员不进行释放。则会在程序结束时由OS回收,其分配的方式类似于链表。

数据段,又被成为静态区(static),用于存放全局变量,静态数据。程序结束后由系统释放。

代码段,用于存放函数体(类成员函数和全局函数)的二进制代码。


以上就是C/C++程序内存开辟的详细内容。

期待各位的点赞,评论与收藏!如有表述错误以及内容错误,还请各位大佬斧正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢写代码的小R

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值