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

输出的第一行显示总字节数、可用块数和平均大小。 后面几行显示每个块的估计大小(按字节计算),并表示为一个范围。__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 0349AC
Non-Confidential