- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存检测技术研究和应用
内存检测技术研究和应用
【摘要】针对变电站系统的软件稳定性和安全性,引入了内存检测技术的概念,介绍了内存泄漏的发生原因和发生方式。然后详细提出了几种内存检测测试方法和测试要求。最后介绍了一种测试技术设计方案,并在实际工程中得到了应用,保证了变电站系统软件运行的稳定性和安全性。
【关键词】变电站自动化 内存泄漏 内存检测 性能监视器
0 引言
变电站自动化系统是将变电站的二次设备(包括测量仪表、信号系统、继电保护、自动装置及远动装置等)经过功能的组合和优化设计,利用先进的计算机技术、现代电子技术、通讯技术和信号处理技术,实现对全变电站的主要设备和输、配电线路的自动监视、测量、自动控制和微机保护以及与调度通信等综合性的自动化功能,在电力系统控制中占有非常重要的地位。因此,对变电站智能设备(微机保护、测控等)系统的可靠性要求越来越高。
随着自动化系统的推广,尤其是数字化变电站的开展,各个厂家(如许继电气、国电南瑞、南瑞继保、上海ABB等)装置系统互连机会,变得越来越多,传统意义上系统主站和子站之间存在的通信不兼容、操作复杂、现场互联争议多的矛盾越来越少。系统本身软件的安全性越来越受到重视。软件运行的可靠性、稳定性,经实践证明很大程度上决定于软件的内存等系统资源使用情况,以及软件运行过程中CPU负荷率占有情况。软件内存泄漏、占用内存过高或CPU负荷率较高等都会引起系统运行不响应用户操作、软件自动退出,或系统死机等严重问题。在测试变电站自动化系统操作站、工程师站、远动站、VQC软件,以及调度自动化系统,配网自动化系统中都需要对被测软件运行过程中的内存及CPU负荷率进行监视,以测试是否存在内存泄漏、CPU负荷率高等影响系统运行可靠性的问题。
软件的应用越来越广泛,规模和复杂度不断提高,软件中的安全缺陷与漏洞也在不断增多,软件安全性问题日益突出。内存检测技术是软件安全性测试的重要方法,是保证软件安全性、降低软件安全风险的重要手段。
本文首先介绍了内存检测技术的相关概念,然后对内存泄漏问题产生原因和发生方式进行了详细剖析,最后以某变电站自动化监控软件为例,给出了内存检测技术在电力系统软件中的具体应用。
1 内存检测技术介绍
1.1 内存的分配方式
对于不同的编程语言,内存的分配方式也不尽相同。以C语言和C++语言为例。
在C语言中,内存分配有四个存储区:
(1)栈。用于存储函数体中定义的局部变量,其内存资源是有编译器自动分配和释放。
(2)堆。采用maUoc、calloc、reaUoc等分配的内存资源就是在堆上,这部分内存资源使用更加灵活,一般是由程序员根据需要分配,使用完毕后编写相应代码释放,若程序员不释放,则在程序结束时有可能由操作系统回收。
(3)全局存储区(静态存储区)。用于存放全局变量和静态变量,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,这些内存资源需要等到程序结束时释放。
(4)常量存储区。函数中使用到的一些常量都存放在常量区,程序结束后自动释放。
在C++语言中,内存分配则有5个存储区:
(1)栈。用于存储那些由编译器在需要的时候分配,在使用完毕后自动清除的变量。通常是指局部变量、函数参数等。
(2)堆。用于存放那些由new分配的内存块,这部分内存资源编译器不会去管理,由应用程序去控制。一般一个new就要对应一个delete,也就是说一个分配对应一个释放,都是由程序员编写代码控制。如果程序员只分配没有释放,那么在程序结束后,操作系统才会自动回收。
(3)自由存储区。用于存放由malloc等分配的内存块,它和堆十分相似,不同点在于它是用free来释放内存资源。
(4)全局存储区(静态存储区)。用于存放全局变量和静态变量,和C语言的区别在于,全局变量和静态变量不分初始化和未初始化,它们共同占用同一块内存区。
(5)常量存储区。用于存放常量,和C语言中一致。
通过比较不同程序设计语言的内存分配方式,我们发现程序中内存的使用是一个相当复杂的过程,不同的变量有不同的存储区域,不同的变量有不同的分配方式和释放方式。那么,内存泄漏是如何发生的呢?
1.2 内存泄漏的定义
(1)一般来说的内存泄漏是指堆内存的泄漏。如1.1中介绍的,在C中,就是指堆存储区的泄漏。在C++中,就是指堆和自由存储区的泄漏。正是由于这些存储区内存资源的使用相对灵活,由程序员自主控制,在程序的运行过程中不受操作系统管理,才有了内存泄漏发生的可能。应用程序一般使用malloc、realloc、new等函数从堆中分配一块内存,使用完后
原创力文档


文档评论(0)