首页 > 解决方案 > 禁用动态内存分配?

问题描述

我试图在低资源应用程序中完全禁用动态内存分配。我从不使用 malloc/free 等,据我所知,我的任何依赖项都没有。

我已经尝试将链接器文件中的堆归零LinkerScript.ld

_Min_Heap_Size = 0x000;  /* required amount of heap  */

但这似乎并不能保证没有库函数会尝试调用malloc.

有没有办法强制不能发生动态内存分配并且如果是这样则构建失败?

此项目(裸机,STM32F302R8)上没有与arm-none-eabi-gcc.

标签: gccstm32dynamic-memory-allocation

解决方案


最常见的基于 gcc 的 Cortex-M 工具链中,库函数由newlib C 库提供。newlib 的实现malloc()和朋友使用该函数为堆分配内存,该_sbrk()函数必须由用户软件实现。

如果_sbrk()您的应用程序中没有,则构建将在链接时失败。找到它并删除它。

您可能还想了解如何找出引用符号的原因,或者在引用任意库函数时使构建失败。


推荐阅读