mallinfo在嵌入式系统中的使用

usage of mallinfo in embedded systems

我正在尝试使用 mallinfo 结构来打印通过 malloc 信息完成的堆使用情况。但是我无法为下面的每个分配找到完全匹配的方法。

printMemoryInfo()
{
   struct mallinfo mi;
   memset(&mi,0,sizeof(struct mallinfo));
   mi = mallinfo();
   printf(" Heap Blocks = %d\n"mi.uordblks)
}


main()
{
  printf("Initial \n");
  printMemoryInfo();
  char * data = malloc(2); /* 2 bytes*/
  printf("After  Malloc 1");
  printMemoryInfo();
  free(data );
  data = malloc(3); /* 3 bytes*/
  printf("After  Malloc 2");
  printMemoryInfo();
  free(data );
  data = malloc(6); /* 6 bytes*/
  printf("After  Malloc 3");
  printMemoryInfo();
  free(data );
  data = malloc(10); /* 10 bytes*/
  printf("After  Malloc 4");
  printMemoryInfo();
  free(data );

}

Initial
Heap Blocks = 99128
After  Malloc 1
Heap Blocks = 99144
After  Malloc 2
Heap Blocks = 99144
After  Malloc 3
Heap Blocks = 99160
After  Malloc 4
Heap Blocks = 99160

从上面的打印日志我无法匹配它分配了多少 第一次为 1 个字节,它增加 16,即使我分配 2 或 3 也会相同,如果我分配 6 个字节,它会增加 32,即使分配 10 个字节也会相同。

我需要帮助理解 mallinfo ,我正在研究 32 位嵌入式处理器。

这里发生了两件事:

  1. malloc 需要一些 space 来存储有关分配的内存块长度的元信息。它通常存储在 returned 块之前,占用 4 个字节。

  2. malloc 始终 return 一个地址,该地址与平台的任何类型变量的最大对齐要求对齐。通常,这是 16 字节或 8 字节对齐。来自 malloc(3) man-page:

The malloc() and calloc() functions return a pointer to the allocated memory, which is suitably aligned for any built-in type.