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 位嵌入式处理器。
这里发生了两件事:
malloc
需要一些 space 来存储有关分配的内存块长度的元信息。它通常存储在 returned 块之前,占用 4 个字节。
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.
我正在尝试使用 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 位嵌入式处理器。
这里发生了两件事:
malloc
需要一些 space 来存储有关分配的内存块长度的元信息。它通常存储在 returned 块之前,占用 4 个字节。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.