内存篇之程序内存消耗评价指标

    嵌入式软件除CPU占用率或者说运行速度外,内存方面还有三大量化评价标准,即ROM size, Peak memory occupation和 max stack depth,虽然不属于什么官方标准,但这三点的确综合反映了程序内存占用方面的整体指标。

    rom size既不是指exe文件大小,也不是lib文件大小,而是目标文件中有效二进制段大小。exe和lib文件中都有一些辅助段,如文件头/加载信息/符号表等,这些段在最终进驻系统RAM的过程中一般会被剔除。因此统计模块的ROM size大小要用二进制工具(如gcc中的ar或objdump等toolchain)分析,累加“代码段”+“数据段”等有效的内存占用段,得到最终结果。

ROM size与编译器及其编译选项有一定相关性,同样的代码由不同的编译器编译,最终获得的纯粹二进制代码大小会有一定差别。如C优化篇提到空间换时间的循环展开就是增大ROM size换取速度的提高。

    peak memory occupation是指模块内不断malloc 与free的过程中,动态堆内存消耗的最高点,这个指标代表了模块对内存的需求。注意这是一个动态过程,并不是将代码中所有malloc的内存大小相加的值,可对照理解内存泄漏中的隐式泄漏。

 

    max stack depth是指整个模块运行过程中所进入的最大栈深度。软件运行中不停进出函数,同时也会不停压栈和出栈,在这个动态过程中触及的最大栈内存的深度代表了模块对系统栈段最小容量的要求。在程序由PC移植到嵌入式系统时要特别注意这个指标,往往要消除一些函数内部局部大数组来降低栈深度,满足嵌入式平台的要求。可参见栈溢出。

这几个评价标准在不同应用中各自有不同侧重点,要根据硬件平台特性综合考量。

你可能感兴趣的:(内存,malloc,内存泄漏,内存访问)