我有一个我现在修复过的错误,但我需要在报告中解释。
我正在开发一个运行FreeRTOS的嵌入式设备,它可以自己进行堆内存管理。 FreeRTOS有自己版本的malloc(),pvPortMalloc(),我不知道并使用它修复了我遇到的内存问题。
我的问题涉及由malloc()引起的内存溢出的大小,数据大小只有8个字节,但溢出的大小是重要的,如果不是更大则为千字节。我的猜测是,在这个应用程序中第一次也是唯一一次使用malloc,设置第二个堆与FreeRTOS的堆竞争,至少几个kb是大小。
任何人都可以证实这一点或给出更好的解释。指向更多信息或参考的指针非常感谢。
答案 0 :(得分:4)
许多malloc实现的一个共同特征是从系统请求比单个请求所需的更大的内存块。例如,glibc's ptmalloc有:
#define MINIMUM_MORECORE_SIZE (64 * 1024)
这作为一次性从OS(通过sbrk()
)请求的内存量(以字节为单位)的下限。因此,您可能会看到64 KB“使用过”的单个微小分配结果。
做这种事情的一个原因是减少系统调用;另一种可能是减少碎片。