似乎马洛克要求太多的内存



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

现在,我正在通过捏住鼻子来避免恶臭并做类似的事情来解决这个问题:

if(requested > 512)
    requested = 512;

在我重新定位堆之前_sbrk。

尽管该系统看起来坚如磐石,但我相当确定它会在我最意想不到的时候回来困扰我。

由于评论中提供了关于不使用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,所以任何反馈将不胜感激。

相关内容

  • 没有找到相关文章