博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IAR DLIB Library heap usage statistics IAR heap 分析
阅读量:4684 次
发布时间:2019-06-09

本文共 2296 字,大约阅读时间需要 7 分钟。

翻译自 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 =     2048system bytes     =     2048in 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 kmax system bytes      =     114688system bytes          =     114688in use bytes          =      985841- total free space   = 16104 15 k2- total free space   = 16168 15 k3- total free space   = 58640 57 k4- total free space   = 62040 60 k5.0- total free space = 74792 73 k5.0- total free space = 74792 73 k5.1- total free space = 74792 73 k5.2- total free space = 83064 81 k5.3- total free space = 91272 89 k5.4- total free space = 114688 112 k5- total free space   = 114688 112 k---------------------------total free space = 114688 112 kmax system bytes =     114688system bytes     =     114688in use bytes     =          0decode end!0:0:0

转载于:https://www.cnblogs.com/cyang812/p/8954576.html

你可能感兴趣的文章
mysqlin会使用索引吗_被面试官虐了,索引为何使用B+树,你知道吗
查看>>
mysql8单节点500m_Kubernetes 部署 Mysql 8.0 数据库(单节点)
查看>>
mysql数据工厂生产_MySQL超时与天蓝色数据工厂副本
查看>>
python缩进可以用在任何语句之后_每天一道Python选择题--python缩进
查看>>
内存泄漏
查看>>
微信小程序获取用户信息解密AES并且注意如何获取unionid
查看>>
JavaScript设计模式----1
查看>>
Qt实现半透明遮罩效果
查看>>
erlang调优方法
查看>>
Mysql linux -N命令
查看>>
daily scrum 12.5
查看>>
linux-ftp install
查看>>
NetXray
查看>>
局域网基本工作原理
查看>>
让历史告诉我们未来
查看>>
UVa540 Team Queue
查看>>
android 练习之路 (八)
查看>>
tp5 中 model 的聚合查询
查看>>
android wear开发之:增加可穿戴设备功能到通知中 - Adding Wearable Features to Notifications...
查看>>
压缩文件函数库(转载)
查看>>