我在嵌入式环境中遇到了堆栈/堆冲突(有关一些背景信息,请参阅 this question)。
我想尝试重写代码,使其不在堆上分配内存。
我可以在 C 中不使用堆来编写应用程序吗?例如,只有当我需要动态分配内存时,我将如何使用堆栈?
最佳答案
我曾在嵌入式环境中做过一次,当时我们正在为生物医学机器编写“ super 安全”代码。 Malloc()s 被明确禁止,部分原因是资源限制和您可以从动态内存中获得的意外行为(寻找 malloc()、VxWorks/Tornado 和碎片,您将有一个很好的例子)。
无论如何,解决方案是提前计划所需的资源,并在包含在单独模块中的 vector 中静态分配“动态”资源,让某种特殊用途的分配器提供和收回指针。这种方法完全避免了碎片问题,并有助于在资源耗尽时获得更细粒度的错误信息。
这在大铁上听起来可能很愚蠢,但在嵌入式系统上,尤其是在安全关键系统上,最好事先很好地了解需要哪些时间和空间资源,即使只是为了调整大小硬件。
关于我可以在不使用堆的情况下编写 C 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1026730/