C++内存分配

本文探讨了C++中的虚拟内存分段,重点比较了栈和堆的特点,阐述了new和delete在对象生命周期中的作用,以及构造和析构函数的顺序。同时,还讲解了new/delete与C语言中的malloc/free的区别,强调了正确使用new[]和delete[]的重要性。
摘要由CSDN通过智能技术生成

虚拟内存分段

一个程序要运行起来,必然要将数据载入内存。程序不同组成部分会存放到程序虚拟内存的不同区域。如下图所示。
在这里插入图片描述
其中,栈主要用于函数调用开辟栈帧,栈是向下生长的,即栈帧空间的开辟是先从高地址开始,然后往低地址。

堆则相反,向上生长。主要用于动态内存开辟。

数据段,也叫做静态区,主要存放static变量和全局变量。

代码段,也叫做常量区,主要存放程序编译出的指令。

堆栈对比
内存管理 编译器自动管理 由程序员控制
生长方向 向下生长,往内存地址减小方向 向上生长,往内存地址增加方向生长
空间大小 较小 32位系统约2G
存在问题 由编译器自动管理,没有堆的问题 频繁申请和释放空间导致内存空间不连续,从而造成大量碎片,使程序效率降低
静态分配 可以 不可以
动态分配 可以通过_alloca进行动态分配,不能通过free或delete释放 只能动态分配,new/delete&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Schuyler Hu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值