C++——new和delete之后发生了什么?

众所周知,如果我们使用new向系统申请了内存,我们应该使用指针指向这一块内存,俾能我们使用结束后,通过delete该指针释放此内存资源。

如果理解只达到这种程度,在内存管理稍微复杂一点时便一定会束手无策。总有一些事情比其他事情更基本一点,现在我来谈谈当我们new和delete之后到底发生了什么。

C++中的五种内存

在C++中内存分为五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。

  1. 堆区:用户使用new获得的内存在这里。用户需要自行管理其声明周期,也就是说一个new要对应一个delete,如果因为某些原因(之后我会说明一些可能的原因)内存没有被释放,那么在程序结束后,会由操作系统自行回收,这显然不是我们想看到的。
  2. 栈区:存储局部变量、函数参数等,比方说你在某个函数里定义了一个int变量a,这个a就存放在栈区。这块内存的生命周期由系统管理,不需要我们去操心。
  3. 自由存储区:用malloc分配的内存放置在这里。这块内存和堆很相似,不过是使用free来释放内存的。
  4. 全局/静态存储区:存放全局变量和静态变量。
  5. 常量存储区:存放常量,不允许更改。

new和delete

回到我们的主题。先看一段代码:

    int *p = new int;
    cout << *p << endl;//输出-842150451
	cout << &p << endl;//输出004FFC14
	*p = 1;
	cout <
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值