C++内存管理总结

内存分配方式:堆,栈,自由存储区,全局区,常量存储区

栈:函数内部的局部变量,函数形参等,自动创建自动释放

堆:由new delete运算符创建和释放,或者程序结束后os自动回收

自由存储区:标准库函数malloc分配的空间

全局区:全局变量和静态变量存储的区域

常量存储区:存常量,此区域数据不允许被修改,一些字符串常量等放在这里


堆和栈的区别:

(1)管理方式

堆:用户动态创建,用户释放,忘记释放会产生内存泄漏

栈:自动释放

(2)空间大小

堆:空间大:4G(32位系统)

栈:空间小(VC下约为1MB)

(3)碎片问题

堆:频繁的new/delete会造成内存空间的不连续,从而产生大量碎片,使得程序效率低

栈:无内存碎片问题

(4)生长方向

堆:向上,内存增加的方向

栈:向下,内存减少的方向

(5)分配方式

堆:动态分配

栈:动态和静态分配(静态为编译器完成)

(6)分配效率

栈的分配效率要高,因为计算机底层提供对栈的支持,分配专门的寄存器存放栈的地址,专门的指令对栈进行操作


堆的使用规则要注意:

(1)用new或者malloc动态分配内存后要检查是否为空,检查内存是否分配成功,防止使用内存地址为空的地址指针

(2)不要忘记为数组和动态内存赋初值,避免未被初始化的内存做右值

(3)避免数组,指针的下标越界

(4)new/delete,malloc/free要成对使用,防止内存泄漏,且使用delete和free之后要把指针设为空(NULL)防止野指针的存在


野指针产生的原因:

1 、指针变量没有被初始化 ;
2 、指针被 free/delete 后被没有设置为 NULL;
3 、指针操作超越了变量的作用域范围 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值