5.15.14. __heapstats()

__heapstats() 함수는 스토리지 할당 힙의 상태에 대한 통계를 표시합니다. 이 함수는 자체 스토리지 관리를 수행하기로 선택한 경우 다시 구현할 수 있는 __Heap_Stats() 함수를 호출합니다(__Heap_Stats() 참조). ARM 컴파일러의 기본 구현은 사용 가능 블록의 개수에 대한 정보를 제공하고 블록의 크기 범위를 예측합니다.

Example 5.21__heapstats()에서의 출력의 예제를 보여줍니다.

Example 5.21. __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()는 사용 블록 수에 대한 정보는 제공하지 않습니다.

함수는 fprintf()와 같이 작동하는 출력 함수 dprint를 호출하여 결과를 출력합니다. 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 © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0205GK
Non-Confidential