似乎malloc要求太多记忆

时间:2012-12-03 22:39:30

标签: gcc malloc sbrk

我有一个使用yagarto GCC编译器的STM32F0应用程序。我已经实现了_sbrk newlib_stubs.c。我遇到的问题是我在调用_sbrk并要求4K内存时调用malloc(256)一个反过来的malloc。我的系统总共只有8K,所以显然这是一个问题。我监视了对_sbrk的调用,它似乎在分配少量内存之前进行了几次调用。

现在我抓住我的鼻子以避免恶臭并做类似的事情来解决这个问题:

if(requested > 512)
    requested = 512;
在重新定位堆之前,在_sbrk中

虽然这个系统看起来很坚固,但我相当肯定这会在我最不期望的时候回来困扰我。

1 个答案:

答案 0 :(得分:0)

通过评论中提供的关于不使用malloc的细微提示,我最终创建了一些东西来分配我自己的内存。我不需要释放它以便简单化。只有那些刺痛我大约一个小时的东西才能维持32位对齐。

这是我的实施pm_代表穷人。

#define HEAPSIZE 0x800 //2K

    uint16_t __heapPtr = 0;
    uint8_t __customHeap[HEAPSIZE];
    void *pm_malloc(uint16_t size){
        while(__heapPtr % 4 != 0)
            __heapPtr++;

        void *block = &__customHeap[__heapPtr];
        if(size + __heapPtr > HEAPSIZE)
            return 0;

        __heapPtr += size;
        return block;
    }

在过去的15年里,我的生活一直是C#,Java和Objective-C,所以任何反馈都会受到赞赏。