DLIBライブラリにおけるヒープ使用の統計
テクニカル・ノート 28545
アーキテクチャ:
Arm
コンポーネント:
general
更新日:
2018/01/18 5:02
はじめに
ヒープについては、IAR C/C++ 開発ガイド のヒープ上の動的メモリ 章で説明しています。このテクニカルノートは、アプリケーションのヒープメモリの使用統計を得る方法を解説します。 すなわち mallocなどの関数が使用するメモリの量を追跡する方法です。
解説
IAR Embedded Workbench for ARM バージョン6.60 以降では、次の関数をコールしてヒープ使用状況統計を収集できます:
__iar_dlmallinfo()
stderrへの簡単な情報の出力のみを得るには、次の関数をコールしてください:
__iar_dlmalloc_stats()
__iar_dlmalloc_stats() の出力は、例えば以下のようになります:
max system bytes = 2048
system bytes = 2048
in use bytes = 16
上記の関数は、arm¥src¥lib¥dlib¥heap¥dlmalloc.cおよびarm¥src¥lib¥dlib¥heap¥dlmalloc_stat.cファイルで宣言および定義されています。8.10より前のバージョンのIAR Embedded Workbench for ARM の場合、これらのファイルは、arm¥src¥libフォルダにあります。
これらの関数を呼び出すには、ヘッダファイルmallocstats.hを使用してください。download here からダウンロードできます。zip file には、これらの関数コールの使用方法を示すサンプルファイル main_test.c も含まれています。
古いバージョン
IAR Embedded Workbench for ARM バージョン6.60より前のバージョンでは、arm\src\lib\dlmalloc.c をプロジェクトに含め、NO_MALLINFO と NO_MALLOC_STATS を0 に設定する必要があります。 dlmalloc.c ファイルをプロジェクトディレクトリにコピーして、変更しなければならないことに注意してください。また、C++ プロジェクトにおいて dlmalloc.c は、C ファイルとしてコンパイルする必要があることにも注意してください。
最大ヒープ使用量
以下は 技術情報記事 Mastering stack and heap for system reliability の見出しヒープサイズの設定方法(How to set the heap size)からの引用です。
"sbrk関数をエミュレートし、デスクトップシステムを模倣するシステムでは、ヒープの使用量の最大値はmalloc_max_footprint関数で得られます。
sbrk関数をエミュレートしない組込みシステムでは、メモリアロケータに対してヒープ領域を一括して与えるのが一般的です。その場合、malloc_max_footprint関数は意味がありません。その関数は単純にヒープサイズを返すだけです。"
IAR Embedded Workbenchでは sbrk()をエミュレートしません。
記事には、ヒープの使用量を計算するための、いくつかヒントとテクニックが書かれています。
まとめ
このテクニカルノートは、アプリケーションからヒープ使用状況の統計情報を収集する方法について説明しています。
全ての製品名は、それぞれの所有者の商標または登録商標です