c++内存管理

这里对我暂时所了解的内存机制做个记录,以后再补。

 

首先是内存分配:

内存主要分为3个部分:

 一是从静态存储区域分配。编译时分配好,主要存放全局变量,static变量,程序结束释放。

 二是从堆栈区域分配。函数内局部变量存放的地方。随变量生命周期自动释放。效率较高,但大小有限。

 三是从内存池分配,即从堆上分配。程序在运行时,采用newmalloc创建。必须由程序员手动调用deletefree释放。

 

然后是new/delete:内存泄露主要是由newdelete的不配套调用产生的

 调用new的时候,会做分配空间->初始化->构造函数工作。(malloc不会调用构造函数,所以最好使用new)。

 调用delete的时候,会自动调用析构函数。delete释放指针所指向空间,指针并没有被删除,最好手动设置指针为NULL

 

最后,当node *a = new node(); node *b = a;可以使用delete b;来释放指针a所指向的空间。

 

附:

测试是否有内存泄露的方法:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。

 

在程序入口写几个语句:
 int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
 tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
 _CrtSetDbgFlag( tmpFlag );
程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值