用好volatile关键字- -| 回首页 | 2005年索引 | - -在电脑上开发DSP算法

统计内存使用量

                                      

前些天在5510DSK上将下个项目需要用到的声音处理程序全部用C语言写好了。5510的内存有160k之多,而最终的产品为了降低成本,会使用内存更小的芯片。这样就需要统计现在的程序的内存使用量。

直接看MAP文件的MEMORY CONFIGURATION可以知道整个工程占用了多少内存,但是由于在5510DSK上实现的功能并不都是必须的,因此有必要统计每项功能所占用的内存量。这样就需要统计每个功能用到的全局变量的大小和函数的大小。

在MAP后面有以内存地址为顺序的符号列表,包括全局变量和函数。每个符号所占用的内存大致上可以通过其地址和下个符号的地址的差值获得。如果存在内存对齐(align)的话,就会出现一些偏差。每个内存区域最后一个符号的大小需要特别计算:

占用内存量=内存区域开始地址+内存区域使用量-符号地址

每个区域的开始地址和使用量在MAP文件头的MEMORY CONFIGURATION中列出。

手工进行上述统计的工作量是相当大的,因此我写了一个程序首先分析MAP文件都后半部分,计算出由符号名映射到所占用内存大小的一个哈希表。然后另外写一个程序分析C语言源文件,以获取此文件中全局符号(全局变量和函数)的列表,最后根据前面的哈希表统计每个源文件所使用的内存大小。

这两个程序用Python编写,其中分析C语言源文件较难,目前只是按照我自己的程序规范正确地找出全局符号,并不能保证其它格式也完全正确。如果要完全正确地分析源文件的话,就相当于在做编译器了。

【作者: 红岩若愚】【访问统计:】【2005年12月9日 星期五 17:37】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3824938

博客手拉手

内存类型 cskyer
电脑故障速排方法-内存篇 iqyn
内存不能read”问题的解决方案 ←過呿dě..
JavaMain使用 raymondzfy
内存不能被read或written解决方案 身在他乡

回复

评论内容: