第一次使用malloc设置堆?

时间:2014-09-13 09:14:40

标签: c memory-management malloc heap freertos

我有一个我现在修复过的错误,但我需要在报告中解释。

我正在开发一个运行FreeRTOS的嵌入式设备,它可以自己进行堆内存管理。 FreeRTOS有自己版本的malloc(),pvPortMalloc(),我不知道并使用它修复了我遇到的内存问题。

我的问题涉及由malloc()引起的内存溢出的大小,数据大小只有8个字节,但溢出的大小是重要的,如果不是更大则为千字节。我的猜测是,在这个应用程序中第一次也是唯一一次使用malloc,设置第二个堆与FreeRTOS的堆竞争,至少几个kb是大小。

任何人都可以证实这一点或给出更好的解释。指向更多信息或参考的指针非常感谢。

1 个答案:

答案 0 :(得分:4)

许多malloc实现的一个共同特征是从系统请求比单个请求所需的更大的内存块。例如,glibc's ptmalloc有:

#define MINIMUM_MORECORE_SIZE  (64 * 1024)

这作为一次性从OS(通过sbrk())请求的内存量(以字节为单位)的下限。因此,您可能会看到64 KB“使用过”的单个微小分配结果。

做这种事情的一个原因是减少系统调用;另一种可能是减少碎片。