技术研究论文集--内存管理进程控制.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
技术研究论文集--内存管理进程控制

目录 1 文档介绍 4 文档编写目的 4 文档阅读对象 4 涵盖范围 4 缩略语定义 4 参考文档 4 2 常见问题汇总 5 2.1 内存操作常见问题 5 2.1.1内存分配未成功,却使用了它 5 2.1.2内存分配虽然成功,但是尚未初始化就引用它 5 2.1.3内存分配成功并且已经初始化,但操作越过了内存的边界 5 2.1.4忘记了释放内存,造成内存泄露 5 2.1.5释放了内存却继续使用它 6 2.1.6内存泄露分类 6 2.1.7内存泄露表现 7 2.1.8预防内存泄露的措施 7 2.2 进程操作常见问题 8 2.2.1僵尸进程的出现 8 3 内存操作 8 3.1基本理论和常用函数介绍 8 3.2基于应用的内存操作库封装说明 13 4 进程操作 13 4.1基本理论和常用函数介绍 13 4.1.1孤儿进程与僵尸进程 13 4.1.2守护进程 15 4.1.3常用进程操作函数 17 4.1.4生产系统中对应的进程控制应用 23 4.2基于应用的进程操作库封装说明 24 文档介绍 文档编写目的 主要介绍unix下内存函数和进程控制函数的一些用法,并结合综合结算子系统和智能交换平台系统进行这两方面的研究: 对在线系统存在的这两方面问题进行汇总,提出相应的解决方法。 将内存和进程操作函数进行整理划分,封装成标准库,供以后使用。 文档阅读对象 unix学习者 系统维护人员 系统开发人员 涵盖范围 内存基本操作 内存泄露问题 进程控制问题 缩略语定义 参考文档 unix环境高级编程 Linux 常用C函数(中文版) 常见问题汇总 内存操作常见问题 2.1.1内存分配未成功,却使用了它内存分配虽然成功,但是尚未初始化就引用它内存分配成功并且已经初始化,但操作越过了内存的边界例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。忘记了释放内存,造成内存泄露 常用解决办法是:动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。 2.1.5释放了内存却继续使用它 (2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。 (3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。 2.1.6内存泄露分类 1.常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2.偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。 3.一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅有一块内存发生泄漏。 4.隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。 2.1.7内存泄露表现 内存泄漏或者是说,资源耗尽后,系统会表现出什么现象哪? cpu资源耗尽:估计是机器没有反应了,键盘,鼠标,以及网络等等。这个在windows上经常看见,特别是中了毒。 进程id耗尽:没法创建新的进程了,串口或者telnet都没法创建了。 硬盘耗尽:机器要死了,交换内存没法用,日志也没法用了,死是很正常的。 内存泄漏或者内存耗尽:新的连接无法创建,free的内存比较少。发生内存泄漏的程序很多,但是要想产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。内存泄漏是一种很难定位和跟踪的错误,目前还没看到有什么好用的工具(当然,用户空间有一些工具,有静态分析的,也会动态分析的,但是找内核的内存泄漏,没有好的开源工具) 内存泄漏和对象的引用计数有很大的关系,再加上c/c 都没有自动的垃圾回收机制,如果没有手动释放内存,问题就会出现。如果要避免这个问题,还是要从代码上入手,良好的编码习惯和规范,是避免错误的不二法门。 一般我们常说的内存泄漏是指堆内存的泄漏。 堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。 应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档