我可以在不使用堆的情况下编写 C 应用程序吗?

标签 c embedded heap-memory

我在嵌入式环境中遇到了堆栈/堆冲突(有关一些背景信息,请参阅 this question)。

我想尝试重写代码,使其不在堆上分配内存。

我可以在 C 中不使用堆来编写应用程序吗?例如,只有当我需要动态分配内存时,我将如何使用堆栈?

最佳答案

我曾在嵌入式环境中做过一次,当时我们正在为生物医学机器编写“ super 安全”代码。 Malloc()s 被明确禁止,部分原因是资源限制和您可以从动态内存中获得的意外行为(寻找 malloc()、VxWorks/Tornado 和碎片,您将有一个很好的例子)。

无论如何,解决方案是提前计划所需的资源,并在包含在单独模块中的 vector 中静态分配“动态”资源,让某种特殊用途的分配器提供和收回指针。这种方法完全避免了碎片问题,并有助于在资源耗尽时获得更细粒度的错误信息。

这在大铁上听起来可能很愚蠢,但在嵌入式系统上,尤其是在安全关键系统上,最好事先很好地了解需要哪些时间和空间资源,即使只是为了调整大小硬件。

关于我可以在不使用堆的情况下编写 C 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1026730/

相关文章:

C 期望标识符或 ‘(’ 在 ‘{’ 之前

c - c 的 if、switch 和 while 条件中的打印语句

c - Lua 和隐式全局状态

java - Java 嵌入式运行时环境上的 com.sun.net.httpserver.HttpHandler ClassNotFound 异常

android - Android Studio创建带有空白页面的新项目,该页面显示错误gradle “myapplication3”项目刷新失败

c - 从 NETSTAT 的输出中删除

rust - 我的 EXTI0 中断处理程序没有被覆盖/正常工作(STM32F3Discovery)

c - 了解指针的用法

c - 我是否将数组所有权从我的库函数传回给调用者?

c++ - 栈上数组与堆上数组的 sizeof()