- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)