我有一个错误,我现在已经修复了,但我需要在报告中解释。
我正在开发一个运行FreeRTOS的嵌入式设备,它自己进行堆内存管理。FreeRTOS有自己版本的malloc(),pvPortMalloc(。
我的问题与malloc()引起的内存溢出的大小有关,数据的大小只有8个字节,但溢出的大小很大,如果不是更大的话,也就是千字节。我的猜测是,malloc在这个应用程序中的第一个也是唯一一个使用,建立了与FreeRTOS的堆竞争的第二个堆,其大小至少为几kb。
有人能证实这一点或给出更好的解释吗。非常感谢指向更多信息或参考资料的人。
许多malloc实现的共同特点是从系统请求比单个请求所需的内存块更大的内存块。例如,glibc的ptmalloc具有以下特性:
#define MINIMUM_MORECORE_SIZE (64 * 1024)
这用作一次从OS(通过sbrk()
)请求的内存量(以字节为单位)的下限。因此,您会期望看到64KB的"已使用"中的单个微小分配结果
这样做的一个原因是减少系统调用;另一个可能是减少碎片化。