关闭

IAR DLIB Library heap usage statistics IAR heap 分析

标签: mallocheaplibraryarm
88人阅读 评论(0) 收藏 举报
分类:

翻译自 IAR Technical Note 28545 《IAR DLIB Library heap usage statistics》 update 2017/9/22

介绍

关于堆的描述在《IAR C/C++ Development Guide for ARM》的 Dynamic memory on the heap 一章中。本技术手册仅描述在应用程序中如何统计堆的使用量。通过跟踪 malloc 或类似函数使用的内存总量来实现。

讨论

在 IAR Embedded Workbench for ARM 6.60 及其以后的版本中,你可以使用如下函数来收集 heap 的使用量:

__iar_dlmallinfo()

如果想要一个简单的输出示例,调用如下函数:

__iar_dlmalloc_stats()

这个函数的输出示例如下:

max system bytes =     2048
system bytes     =     2048
in use bytes     =       16

你可以在IAR安装目录下的 arm\src\lib\dlib\heap\dlmalloc.carm\src\lib\dlib\heap\dlmalloc_stat.c 文件中找到上述函数的声明和定义。如果是IAR for ARM 8.10 以前的版本,这两个文件应该在 arm\src\lib 目录下。

为了能够调用这些函数,你需要包含头文件 mallocstats.h 。你可以在这里下载一个 zip 文件,里面有这个头文件和一个 main_test.c 文件,用于演示如何调用上述函数。

历史版本

对于IAR Embedded Workbench for ARM 6.60 以前的版本中,你必须将 arm\src\dlmalloc.c 加入到工程中,并且设置宏 NO_MALLINFO 和 NO_MALLOC_STATS 为 0 。注意,你需要将这个文件拷贝到你的项目目录下进行修改。并且,如果是在 C++ 工程中,你需要使用 C编译器 来编译这个文件。

堆最大使用量

以下内容摘自文章《Mastering stack and heap for system reliability》的如何设置堆大小一节。

桌面系统中,通过实现 sbrk() ,堆的最大使用量可以从 malloc_max_footprint() 得到。嵌入式系统并不实现 sbrk(),内存分配器通常只在一块内存上进行分配。因此 malloc_max_footprint() 函数是没用的,它仅仅返回整个 heap 的大小。

IAR Embedded Workbench 并不实现 sbrk()。

在这篇文章中提到了一些关于如何计算程序使用的 heap 大小的方法和技巧。

结论

本技术手册介绍了如何在应用程序中统计 heap 的使用量。

所有产品名称均为其各自所有者的商标或注册商标。

补充

如下是一个简单的函数,调用这个函数可以显示当前的 heap 消耗:

void heap_usage()
{
    printf("---------------------------\n");

    struct mallinfo m;
    m = __iar_dlmallinfo();
    printf("total free space = %u, %u k\n", m.fordblks, m.fordblks/1024);
    __iar_dlmalloc_stats();
}

结果如下:共分配 112k heap 空间,应用程序不断申请,最终仅剩余 15k 左右。之后应用程序结束,开始一步步释放申请的空间,可用的 heap 空间也随着释放开始增加。最终全部释放,112k heap 均可被重新使用。

·some code·
---------------------------
total free space      = 16104 15 k
max system bytes      =     114688
system bytes          =     114688
in use bytes          =      98584
1- total free space   = 16104 15 k
2- total free space   = 16168 15 k
3- total free space   = 58640 57 k
4- total free space   = 62040 60 k
5.0- total free space = 74792 73 k
5.0- total free space = 74792 73 k
5.1- total free space = 74792 73 k
5.2- total free space = 83064 81 k
5.3- total free space = 91272 89 k
5.4- total free space = 114688 112 k
5- total free space   = 114688 112 k
---------------------------
total free space = 114688 112 k
max system bytes =     114688
system bytes     =     114688
in use bytes     =          0
decode end!
0:0:0 
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

IAR uCOS .icf栈、堆区大小设置规则

这里说说 堆、栈的大小设置: 堆区+栈区+其他=20K 其他:静态区+文字常量区等,要看划分种类 所以,堆区+栈区<20K, 类似molloc函数会在堆上非配内存,按应用场景划分大小,如不过分...
  • guozhongwei1
  • guozhongwei1
  • 2015-11-23 20:41
  • 1366

在IAR中设置CC2530参数

1)General Option选项     在
  • sanqima
  • sanqima
  • 2014-04-21 15:05
  • 2950

IAR建立CC2530工程的设置问题及生成.hex文件

选择 Project 菜单下的Options配置与 CC2430 相关的选项。 1、General Options选项,按下图配置Target标签,选择Codemodel 和Data mod...
  • mengzhuicanyang
  • mengzhuicanyang
  • 2014-05-02 20:41
  • 7374

栈的理解 IAR/MDK修改stack/heap

栈的理解一个程序大体上讲都是由变量和函数组合而成,变量有全局变量和局部变量,还有函数间传值的参数以及返回值。Stack是为了程序运行过程中临时保存所需数据而在内存里分配的一小块空间。保存的数据类型一般...
  • huan447882949
  • huan447882949
  • 2017-12-13 14:19
  • 97

Java VM Heap 堆分析(节选)

  • 2011-01-20 13:36
  • 218KB
  • 下载

Use MFC in a Static Library,This may be due to a corruption of the heap....

工程选择Use MFC in a Static Library 模式,编译出的程序较大,发布时可以不用带
  • gllg1314
  • gllg1314
  • 2014-09-30 10:17
  • 746

IAR Linker and Library Tools Reference Guide

  • 2014-04-03 11:54
  • 1.38MB
  • 下载

IAR中cortex-m4启动流程分析

软件环境:windows7旗舰版,IAR V6105(EWARM-EV-WEB-6105)  ARM芯片:飞思卡尔K60N512VMD100 (cortex-m4核心) 示例程序:飞思卡尔官方...
  • akunainiannian
  • akunainiannian
  • 2014-04-11 19:28
  • 2470

IAR中ICF文件分析与应用

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理 解ICF文件的内容尤其重要。 一个标准的ICF文...
  • u011461420
  • u011461420
  • 2013-12-05 21:54
  • 582

IAR中ICF文件分析与应用

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理 解ICF文件的内容尤其重要。一个标准的ICF文件可包括...
  • hitxiaya
  • hitxiaya
  • 2011-07-14 22:08
  • 11106
    个人资料
    • 访问:355405次
    • 积分:3707
    • 等级:
    • 排名:第10162名
    • 原创:96篇
    • 转载:3篇
    • 译文:2篇
    • 评论:84条
    文章分类
    最新评论