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()をエミュレートしません。
記事には、ヒープの使用量を計算するための、いくつかヒントとテクニックが書かれています。
まとめ
このテクニカルノートは、アプリケーションからヒープ使用状況の統計情報を収集する方法について説明しています。
全ての製品名は、それぞれの所有者の商標または登録商標です