C++动态内存管理

本文介绍了C++中的动态内存管理,包括虚拟内存分段的栈、堆、静态区和常量区。重点讨论了C++中new和delete与C语言的malloc和free的优劣,以及它们在内存分配和释放时的不同,特别是new和delete在处理自定义类型时的构造和析构功能。同时提到了operator new和operator delete的作用以及与new、delete的关系。
摘要由CSDN通过智能技术生成

虚拟内存分段

虚拟内存分段分为:
1.栈 2.堆 3.静态区(数据段) 4.常量区(代码段/正文)

一. 栈
函数的调用需要建立栈帧,栈帧主要存储函数的变量,参数,返回值等等。
栈是向下生长的,栈帧后调用的比先调用的地址小,栈的大小一般是有规定的,栈所占的内存是不大的。

二.堆
动态内存申请和释放例如malloc和free在堆中分配空间与释放空间,堆是比较大的,一般有接近2g左右的空间,堆是向上生长的,堆是给指针申请内存的,也就是说后申请的地址比先申请的地址大

三.静态区
static修饰的变量和全局常量在静态区

四.常量区
常量和程序编译出的指令在常量区存储,注意:const变量不是定义在常量区的。

例子:
在这里插入图片描述
在上图中可以看到很多变量的声明与定义
而在这些变量中有:
int globalVar = 1; 因为这时是定义在全局变量,所以此时此变量就存储在静态区。
static int staticGlobalVar = 1; 此时变脸是定义在全局的并且还是一个静态变量,所以此时该变量也是存储在静态区的。
int localVar = 1; 此变量是定义在主函数中的,所以此变量是存储在栈中的。
char char2[] = “abcd”; 此时定义的是一个数组,所以当前的char2变量是存储在栈中的。
char* char3 = “abcd”; 此时定义的是一个指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值