当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>C++内存管理详解</b>[VC/C++编程]

赞助商链接



  本文“<b>C++内存管理详解</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

巨大的Bill Gates 曾经失言:

640K ought to be enough for everybody — Bill Gates 1981

程序员们常常编写内存管理程序,常常提心吊胆.假如不想触雷,唯一的办理办法就是发现全部暗藏的地雷并且解除它们,躲是躲不了的.本文的内容比普通教科书的要深化得多,读者需细心阅读,做到真正地通晓内存管理.

1、内存分配方法

内存分配方法有三种:

(1)从静态存储区域分配.内存在程序编译的时刻就已经分配好,这块内存在程序的整个运行期间都存在.比方全局变量,static变量.

(2)在栈上成立.在履行函数时,函数内部分变量的存储单元都可以在栈上成立,函数履行完毕时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集合,效率很高,但是分配的内存容量有限.

(3) 从堆上分配,亦称动态内存分配.程序在运行的时刻用malloc或new申请肆意多少的内存,程序员自己负责在什么时刻用free或delete释放内存.动态内存的生存期由我们决意,利用非常机动,但问题也最多.

2、常见的内存错误及其对策

发生内存错误是件非常麻烦的事情.编译器不能自动发现这些错误,普通是在程序运行时才能捕捉到.而这些错误大多没有明显的症状,时隐时现,增添了改错的难度.有时用户肝火冲冲地把你找来,程序却没有发生任何问题,你一走,错误又爆发了. 常见的内存错误及其对策以下:

* 内存分配未成功,却利用了它.

编程新手常犯这种错误,因为他们没有意识到内存分配会不成功.常用办理办法是,在利用内存之前查抄指针能否为NULL.假如指针p是函数的参数,那么在函数的进口处用assert(p!=NULL)举行

查抄.假如是用malloc或new来申请内存,应当用if(p==NULL) 或if(p!=NULL)举行防错处理.

* 内存分配固然成功,但是还没有初始化就引用它.

犯这种错误主要有两个起因:一是没有初始化的见解;二是误认为内存的缺省初值全为零,招致引用初值错误(比方数组). 内存的缺省初值毕竟是什么并没有统一的尺度,固然有些时刻为零值,我们宁可托其无不可托其有.所以无论用何种方法成立数组,都别忘了赋初值,即就是赋零值也不可省略,不要嫌麻烦.

* 内存分配成功并且已经初始化,但操作越过了内存的边界.

比方在利用数组经常常发生下标“多1”大概“少1”的操作.分外是在for循环语句中,循环次数很简单搞错,招致数组操作越界.

* 忘掉了释放内存,造成内存泄露.

含有这种错误的函数每被调用一次就丧失一块内存.刚开始时系统的内存充沛,你看不到错误.终有一次程序忽然死掉,系统呈现提醒:内存耗尽.

动态内存的申请与释放必须配对,程序中malloc与free的利用次数一定要相同,不然必定有错误(new/delete同理).

* 释放了内存却持续利用它.

有三种情形:

(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象毕竟能否已经释放了内存,此时应当重新计划数据构造,从根本上办理对象管理的混乱局面.

(2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”大概“引用”,因为该内存在函数体完毕时被自动销毁.

(3)利用free或delete释放了内存后,没有将指针设置为NULL.招致产生“野指针”.
  以上是“<b>C++内存管理详解</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .