浅议C++中的内存管理

来源 :中国电子商情 | 被引量 : 0次 | 上传用户:jievons
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  Abstract: Memory management in C++ is a big issue for the users who rely on those languages in their project. And memory management two aspects in its domain, first, make it work right; second, make it fast. Every programmer knows it must be listed like this, because code run dizzily fast, but don’t work under control, is no use at all. If memory allocated but not released correctly, then memory leak generate. So the defensive programming is a effective method to avoid the error.
  Key word:Memory manage, memory leak, defensive programming
  一、引言
  内存管理的主要内容有两点:1,将内存正确的分配和释放; 2,让计算机能快速的执行内存的分配和释放。我们都知道这个顺序不能颠倒,因为即使程序运行的很快,但是没有正确的分配和释放内存,这个程序对我们也没有多少用处。
  二、内存的分配
  C++分配内存按分配类型分为三种。
  1、全局静态量,在文件的全局变量区定义一整型变量,诸如static int num = 0定义的变量,这种变量在程序的开始运行到结束运行的全部生命周期都存在,而且此变量名在后面程序内不可以重复定义,如果重复定义,编译器会提示错误,将无法通过编译而生成可运行文件。此种分配类型分配给变量的内存位置是全局区。程序的开始运行时,由编译器分配到内存的全局变量区,直到程序结束,变量所使用的内存被编译器释放。
  2、局部变量,典型的是在函数或者语句内部定义的变量,比如for(int i=0; i  3、使用运算符new分配的变量,比如:new int[10], 或者malloc (10*sizeof(int)),此种方式分配的内存位置存在一个称为堆区的内存上,注意它和数据结构的堆是不同的,实现方式类似于链表。一般来说,此种分配方式是在要分配的内存无法预知的情况下,它由程序员手动分配,手动释放。如果程序员在使用此类型变量不正确,将导致各种问题的产生。
  三、常见错误及对策
  1、对上面提到的全局静态变量num,在程序的使用过程中,就是要注意你的每次改变,都是全局性的,所以尽量不要轻易改变它除非你想这么做。如果为了防止程序的其他用户改变你不希望改变的全局变量,你可以在它前面加上const来限定。比如:const int num = 0;这样别的用户在试图改变之,编译器就会给出警告。
  2、而使用局部变量的时候,容易出现的错误就是对变量的生存周期不了解产生的错误,在变量的生存期内重复定义了变量。我们可以使用长命名法来命名变量,这样变量重复定义的机会就大大降低,而且变量名在使用过程中,其意义也更加明显。
  3、而使用new分配的变量内存,最容易出现的错误是,没有正确的释放。常见的错误比如,使用int *p = new int来分配一组整形的数组;或者使用delete p来释放int *p = new int[10]分配的数组;或者使用delete运算符再次释放已经释放过的内存块,这样会产生无法预料的后果。这样产生的错误,编译器无法帮组我们识别,所以这种错误更加隐蔽,而且在调试的时候更难发现。我们的对策就是可以使用一个对象的计数器,来监视对象的创建和释放,采取一些断言,比如assert函数,来以防止我们错误的调用delete运算符。
  四、应用实例
  下面我们使用一段代码来说明我们的3.3中的方法,采用的IDE是vs2010,平台是win7 64位Intel机器。
  #include "stdio.h"
  static int counter_for_object = 0;
  #define NULL 0
  class monster
  {
  private:
  int hp;
  int mp;
  public:
  monster():hp(0),mp(0){ counter_for_object ++;}
  ~monster(){counter_for_object--; }
  };
  int _tmain(int argc, _TCHAR* argv[])
  {
  monster *groupOfMonsters = new monster[10];
  delete [] groupOfMonsters;
  groupOfMonsters = NULL;
  printf("end of code\n");
  return 0;
  }
  如果在打印界面的end of code之前出现的counter_for_object最后不为0,则可判定出内存泄露.
  五、结束语
  合理的分配内存和释放内存,是程序员的在编写合理的代码时最重要的任务,而采用合理的策略和良好的代码习惯,是我们能保证代码质量的工具。
  参考文献
  [1] Scott Meyers, Effective C++[M], Addison-Wesley, 1992.
  [2] 沈被娜,刘祖照. 计算机软件基础(第三版)[M]. 清华大学出版社.2000.
  (作者单位:广东科技学院)
其他文献
北京凤凰岭美术馆的成功崛起与发展,引起了全国美术界及社会各界的广泛关注,特别是自开办凤凰岭书院以来,更为学界所称道。在积累书院丰富的办学经验的基础上,北京凤凰岭美术馆面向全国招生,已成功创办了首届中国画创作学习班。并以其高度的历史责任感,一流的师资力量,新颖的办学方式,先进的教学理念,完善的课程设置,得天独厚的学习条件,得到了首届中国画创作学习班全体学员的高度评价和认可。导师授课立足高端,从中国画
期刊
书画同源,异体同宗。历史上每一次对书画同源问题的追问,都伴随着对传统的溯源,对画史的梳理,和对传统与创新的论争,激荡起一场场思想的波澜。中国画在一次次的激荡中回归传统,汲古出新,创造出一个个高峰——赵孟頫、董其昌、石涛、八大、黄宾虹……  如果我们抛开考证的方法作一个“思想考古”,回到远古先人的思维方式和生活场景作一次思想实验,那么我们会有这样的推测:书、画有着共同的逻辑起点——点、线。当古人看到
期刊
(先后为序,简称:张、林、褚、培)/文    1.《齐云山写生》  张:这是由龙瑞老师带领我们去皖南齐云山写生,画的是一个道观小景,用笔松动,比较尊重现实。前面是菜园,后边是寺院,山坡上是道观和一些小建筑。当时我们距离这处小景很近,我有意识地把菜园放在前面,将景深拉大、推远,使画面富有纵深感。  林:这幅画鲜活、生气盎然,写生作品虽不大,表现的物象也不多,但却营造出一种诗的意境。很多北方人画画浑厚
期刊
引言:随着网络上业务信息系统的不断增加,不同的业务系统间形成了相互隔离的信息孤岛,网络信息难以实现共享,这一问题阻碍了网络信息化的进一步发展。本文将云计算技术引入到信息共享平台的建设中,以期建立一个网络信息共享平台,实现信息共享。  一、信息共享  信息共享技术随着信息化技术和共享技术的发展而不断发展,先后经历了业务系统直连架构、基于中间件的架构以及SOA架构等。在互联网络发展的早期,对信息共享的
期刊
“贴近文脉,正本清源”是龙瑞提出的中国画学主张,它作为北京凤凰岭美术馆的学术指导思想,也是本刊的办刊宗旨。因此,明确这一思想的实质内涵,应是本馆理论研究与办刊的首要学术认知。馆长张培武指出,要拿出凤凰岭美术馆自己的学术阐释。理论研究部撰写“贴近文脉,正本清源”画学思想研究、推进纲要之后,馆长张培武、常务副馆长韩国栋和策划宣传部林奇峰、展览部张民生并理论部褚哲轮进行了一次简要的讨论。张培武认为,“贴
期刊
陈嵘  1958年11月出生于内蒙古通辽市。毕业于中央美术学院国画系,中国国家画院刘大为工作室首届精英班画家,现为天津画院专业画家,国家一级美术师,中国美术家协会会员。中国国家画院刘大为工作室助理导师。  《民兵史画长卷》(局部)荣获第九届全国美展金奖。  《画说深圳》荣获第十届全国美展铜奖。  《女人河》荣获第十届全国美展优秀奖。  《民兵史画长卷》入选百年中国画大展。  《南岭村记事》荣获建党
期刊
引言:随着现代企业的不断发展,计算机应用技术在企业管理以及运行过程中得到了普遍的运用,通过这种应用技术,能够不断提升工作效率,降低生产成本,从而增加整个企业的经济效益,本文主要对计算机信息技术对企业信息化的影响进行分析,并对实际运用进行了相应的探讨。  计算机信息技术的产生和发展在一定程度上改变了世界的面貌,通过在现代企业运行过程中运用计算机应用技术,能够提升其信息化水平。[1]信息管理在整个企业
期刊
引言:随着现代社会的进步和科技的发展,各企业之间的竞争也越来越激烈,为了达到现代化要求,为了使企业更有竞争力,现代办公信息化已经成为我国各企业的重中之重。本文就办公信息化对现代企业发展的影响作出几点认识,以体现信息化发展对企业的重要性。  前言  自21世纪以来,网络已经成为我国国民生活的一部分,不仅与日常生活紧密相关,还普遍应用于现代企业的工作当中。21世纪企业的竞争就是现代信息化技术的竞争,若
期刊
引言:飞速的时代造就飞速的经济,这些都使得信息透明化,商务简易化。尤其是在流通零售行业,信息更是无处不在。然而由于零售业的经营模式,零售业态极其复杂,导致零售行业的信息化程度较低,造成了零售服务行业在某种程度上发展缓慢,这些问题急需解决。  面对上述种种复杂情况,易 事派凭借着自己在移动互联网的一个定位,肩负起对零售服务行业信息化变革的重任,与国家多媒体软件工程技术研究中心强强联手,针对零售业的经
期刊
引言:尼那電厂位于青海省贵德县黄河干流上,坝高48.7m,坝长603m。水库正常蓄水位2235.5m,为日调节水库。河床式电站,在面厂房安装有4台贯流式发电机组,单机容量40MW,电站总装机容量160MW。随着近年来水电厂计算机监控系统的广泛应用,计算机监控系统功能日趋成熟,采用的软件、硬件迅猛发展。  一、原监控系统运行情况  原监控系统投运以来,设备经过近10多年的运行,已进入故障频发期,同时
期刊