gcc - 禁用动态内存分配?
问题描述
我试图在低资源应用程序中完全禁用动态内存分配。我从不使用 malloc/free 等,据我所知,我的任何依赖项都没有。
我已经尝试将链接器文件中的堆归零LinkerScript.ld
:
_Min_Heap_Size = 0x000; /* required amount of heap */
但这似乎并不能保证没有库函数会尝试调用malloc
.
有没有办法强制不能发生动态内存分配并且如果是这样则构建失败?
此项目(裸机,STM32F302R8)上没有与arm-none-eabi-gcc
.
解决方案
在最常见的基于 gcc 的 Cortex-M 工具链中,库函数由newlib C 库提供。newlib 的实现malloc()
和朋友使用该函数为堆分配内存,该_sbrk()
函数必须由用户软件实现。
如果_sbrk()
您的应用程序中没有,则构建将在链接时失败。找到它并删除它。
您可能还想了解如何找出引用符号的原因,或者在引用任意库函数时使构建失败。
推荐阅读
- google-cloud-platform - 使用 google_cloud_scheduler_job 调度批处理作业
- rust - 如何为函数实现特征
- regex - 使用 Perl 读取模式匹配之间的所有行
- cuda - 支持 `__shfl()` 和 `__shfl_sync()` 指令的正确方法是什么?
- sql - Delphi:将选择语句的输出保存在字符串列表中
- python - (Nginx) + Gunicorn + Flask + Bokeh on Azure with AD
- css - Angular HTML class.otherclass 解释
- javascript - 链接到外部 URL 并打开模式窗口
- cypress - cy.request 的最简单用例不起作用
- java - 获取正确的搜索结果页码 - Selenium Java