【发布时间】:2012-12-03 22:39:30
【问题描述】:
我有一个使用 yagarto GCC 编译器的 STM32F0 应用程序。我已经实现了_sbrk newlib_stubs.c。我遇到的问题是我在调用 _sbrk 并要求 4K 内存时调用 malloc(256) 依次调用 malloc。我的系统总共只有 8K,所以显然这是个问题。我已经监视了对 _sbrk 的调用,它似乎在分配较少的内存之前进行了一些调用。
现在我正在通过捂住鼻子避免恶臭并做一些类似的事情来解决这个问题:
if(requested > 512)
requested = 512;
在重新定位堆之前在 _sbrk 中。
虽然系统看起来坚如磐石,但我相当肯定它会在我最不期待的时候卷土重来并困扰我。
【问题讨论】:
-
malloc()的实现从何而来? -
来自一个在汇编器中实现的库,它是 YAGARTO 工具链的一部分。下一步将是破解它的源代码。
-
对于桌面/服务器操作系统似乎可能有意义,但对于微控制器来说似乎很奇怪。 (事实上,在具有 8K RAM 的系统中,
malloc()本身似乎有点奇怪,但我很老派。)