C++内存管理

一. C++内存分布

在这里插入图片描述

在这里插入图片描述


globalVar在哪里?----->全局变量在静态区(数据段)
staticGlobalVar在哪里?----->静态变量在静态区(数据段)
staticVar在哪里?----->静态的局部变量也是静态变量,在静态区(数据段)
localVar在哪里?----->局部变量在栈

num1是数组名,表示首元素地址
num1数组中存储的元素也是在栈上的,所以首元素地址也是栈上的地址

num1 在哪里?----->。栈
char2在哪里?-----> 栈
*char2在哪里?----->(char2在sizeof时代表数组名,运算时代表首元素地址)

pChar3在哪里?----->pChar3是一个指针,是字符串常量"abcd"的地址,指针变量本身是在栈上创建的
*pChar3在哪里?----->*pChar3是字符串常量,在常量区(代码段)

指针变量本身是在栈上创建的,指针管理的空间都是在堆上创建的
1.简单理解:指针变量是这个栈帧里的局部变量,存储在栈里
2.ptr123管理的空间都是动态开辟的内存(malloc,realloc),这些空间是在堆上创建的

ptr1在哪里?----->栈
*ptr1在哪里?----->ptr1存的是地址,地址是指向malloc的,malloc在堆上

二. C++内存管理方式(new和delete)

2.1 C语言动态内存管理方式

malloc/calloc/realloc/free

但是开辟动态内存,在函数结束时,需要自己释放free()

2.2 C++内存管理

2.2.1 内置类型的内存管理

C++有自己的内存管理方式:通过newdelete操作符进行动态内存管理。(它们也是在堆上动态申请)

newdelete 是新的关键字和操作符。使用:new后面直接+类型new int;即可,如果想初始化,就在类型后面+括号,括号内写初始化值new int(9);

//管理对象

int main()
{
   
	int* ptr1=new int(9);
	int* ptr2 = new int;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值