嵌入式内存优化.doc

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

嵌入式内存优化 姓名:汪如胜 学号:1215115032 班级:移动一班 专业:软件工程 嵌入式安全使用内存? 对于任何一个应用程序,其内存使用的方式都对整个程序的运行效率、稳定性有重大的影响。例如:对于资源紧张的嵌入式系统,如果编写的程序造成内存泄露,运行的初始阶段可以正常运行,但是当因内存泄露的积累而造成内存资源耗尽时,该应用程序便会崩溃;如果是一个资源相对丰富的嵌入式系统,引起内存泄露的应用程序可能可以稳定运行较长时间后才出现资源耗尽情况,此种情况在测试应用程序时期难以发现,但对实际应用会有重大影响。?????? 一般来讲,Linux?的内存的分配方式有以下几种:?? 1、从静态存储区域分配:该部分内存在程序编译的时候已经分配完成,在程序的整个运行期间都存在,一般用于全局变量。?? ???? 2、从栈分配:一般来讲,函数内的局部变量的存储单元都可在栈上创建,函数执行完成后,相应的存储单元会自动释放。栈内存分配功能内置于处理器的指令集中,效率很高,但是分配的内存容量有限。?? ???? 从堆分配:该种分配方式就是所谓的动态内存分配,使用该种分配方式是提高程序效率的基础。该部分内存需要程序员使用malloc?或者new?来申请任意大小的内存,同时,程序员必须负责在内存使用完成后用free?或者delete?来释放内存,使用非常灵活,但是很容易出现问题,实际上,应用程序使用内存出现的问题几乎都出在该种分配方式上。?????? 在使用动态内存的过程中,一定要先保证内存能够成功的分配,即在使用内存之前首先要检查该内存指针是否为NULL;同时,若该内存区域可以使用,则使用前一定要对该区域内存进行初始化,因为内存的默认初值目前还没有统一的标准。?? ???? 内存在正常使用中,一定要防止操作越过内存的边界,即所谓的内存溢出。内存溢出容易使程序运行紊乱,并且可能直接导致应用程序崩溃。在内存使用完成后,必须使用相应的语句来释放该部分内存,否则该部分内存即产生内存泄露。?? 在实际的代码书写过程中,可以通过查询分配内存语句和释放内存语句的个数来检查是否存在内存泄露。若分配内存的操作次数和释放内存的操作次数相等,则内存一般不会产生泄露,若不相等,则内存肯定存在泄露,必须查明原因,修改相应代码,否则该应用程序很可能会出现问题。 性能分析 程序性能的问题,有很多原因,需要对症下药。导致软件性能低下,主要有下面3种原因。 (1)程序的运算量很大,导致CPU过于繁忙,CPU是瓶颈。 可以在设备上运行“top”命令,如果某个进程的CPU利用率很高,则说明CPU是性能瓶颈。 (2)程序需要做大量的I/O,读写文件、内存操作等等,CPU更多的是处于等待,I/O部分成为程序性能的瓶颈。 运行“top”命令,系统内进程的CPU利用率并不高,这时可以通过proc目录下的相关文件(后面将会讲到)查看系统I/O情况。如果系统存在大量的I/O,则可以断定I/O为性能瓶颈。 (3)程序之间相互等待,结果CPU利用率很低,但运行速度依然很慢,程序间的共享与死锁制约了程序的性能。如果系统的CPU利用率并不高,而且也不存在大量的I/O操作,那么很可能是多个线程之间相互等待造成的,这时就需要对程序进行大规模的重构。 proc目录 通过proc目录,能够了解到CPU和IO设备的工作状况,从而能够帮助分析导致程序性能低下的原因。 1.系统相关 还是先通过proc目录,了解整个系统的性能。 因为嵌入式设备中一般只有一个CPU,所以这里只关注第一行。 cpu 5116 0 7801 249195 60 41 55 cpu后面数值分别代表着CPU在不同状态下所用的时间,其单位为jiffy(0.01s),7个数值的含义分别是: user(5116):从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负的进程。 nice(0):从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。 system(7801):从系统启动开始累计到当前时刻,内核所占用的CPU时间。 idle(249195):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其他等待时间。 iowait:从系统启动开始累计到当前时刻,硬盘IO等待时间。 irq:从系统启动开始累计到当前时刻,硬中断时间。 softirq:从系统启动开始累计到当前时刻,软中断时间。 由此可以推断出: CPU时间=user+syst

文档评论(0)

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

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

1亿VIP精品文档

相关文档