2.16.14. __heapstats()

__heapstats() 関数は、ストレージ割り当てヒープの状態に関する統計情報を表示します。 ARM コンパイラのデフォルトの実装では、存在する未使用ブロックの数と、サイズ範囲の見積もり値に関する情報が返されます。

Example 2.25 は、__heapstats() の出力例を示しています。

Example 2.25. __heapstats() の出力

32272 bytes in 2 free blocks (avge size 16136)
1 blocks 2^12+1 to 2^13
1 blocks 2^13+1 to 2^14

この出力の 1 行目には、合計バイト数、合計未使用ブロック数、平均サイズが示されています。 それ以降の行には、各ブロックの予想サイズの範囲がバイト単位で示されています。__heapstats() は、使用されているブロック数に関する情報は返しません。

この関数は、出力関数 dprint を呼び出すことによって結果を出力します。この出力関数は fprintf() と同じように機能する必要があります。 dprint に渡される最初のパラメータは、提供されているポインタ param です。 fprintf() 自体を渡すこともできますが、その場合は正しい関数ポインタ型にキャストする必要があります。 この型は便宜上 typedef として定義されています。 これを __heapprt と呼びます。 以下に例を示します。

__heapstats((__heapprt)fprintf, stderr);

Note

まだ出力を送信していないストリームで fprintf() を呼び出すと、ライブラリは内部で malloc() を呼び出して、そのストリーム用のバッファを作成します。 この動作が __heapstats() への呼び出し中に行われると、ヒープが破損することがあります。 したがって、何らかの出力が stderr に送信されていることを確認する必要があります。

デフォルトである単一領域のメモリモデルを使用する場合、ヒープメモリは必要に応じて割り当てられます。 つまり、ヒープの空き容量は、メモリの割り当てと解放を行うたびに変化します。 例えば、以下のシーケンスがあるとします。

  int *ip;
  __heapstats((__heapprt)fprintf,stderr);   // print initial free heap size
  ip = malloc(200000);
  free(ip);
  __heapstats((__heapprt)fprintf,stderr);    // print heap size after freeing

出力は以下のとおりです。

4076 bytes in 1 free blocks (avge size 4076)
1 blocks 2^10+1 to 2^11
2008180 bytes in 1 free blocks (avge size 2008180)
1 blocks 2^19+1 to 2^20

この関数は、ARM ライブラリに固有の拡張です。

構文

void __heapstats(int (*dprint)( void *param, char const *format,...),  void* param);

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0349AJ
Non-Confidential