在嵌入式C中使用malloc()[关闭]

bhmjp9jg  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(77)

已关闭。此问题为opinion-based。它目前不接受回答。
**希望改进此问题?**请更新问题,以便editing this post能够以事实和引文来回答。

7年前关闭。
Improve this question
在嵌入式C语言中,malloc()在单任务嵌入式系统中有用吗?
我在嵌入式系统工作了0.5年。我从来没有在8位控制器编程中使用过malloc()
有人能建议我在8位控制器编程中使用malloc()吗?

kqlmhetl

kqlmhetl1#

在嵌入式系统中,不鼓励使用动态分配。关键系统的行为应该是确定性的。许多用于嵌入式固件的库和操作系统避免使用动态分配。
关于malloc不适合嵌入式系统的原因,请参阅:malloc sins
关键系统的标准可能会禁止使用malloc作为一种糟糕的编程实践。
例如MISRA C1和MISRA C2不允许使用malloc/calloc。参见MISRA标准。
Q&A:dynamic memory allocation - MISRA Bulletin Board

ljo96ir5

ljo96ir52#

不,它没有用。malloc的全部目的是让多个进程在需要时动态共享系统中所有可用的RAM内存。这反过来意味着您有一个多进程系统,并且可用RAM的数量是巨大的,但也是可变的或未知的。
在“裸机”(无操作系统)或使用RTOS的较小嵌入式系统中,这种内存共享没有任何意义。与PC不同,这种嵌入式系统是完全确定性的,因此您总是知道最坏情况下所需的RAM数量。你也知道芯片上有多少RAM。
在这样的系统上使用malloc的需求通常源于困惑的PC程序员,他们在没有学习嵌入式编程的情况下就开始学习嵌入式编程。
详情在这里。

b1payxdu

b1payxdu3#

malloc在这样的系统中没有任何意义。当你做系统工程时,包括资源的分配。作为单个任务,该任务拥有系统中的所有资源。因此,在设计时,您需要确定每一项所需的大小,包括内存。早在运行时之前,你就已经知道什么结构会得到多少内存,所以没有理由为你已经知道答案的东西增加额外代码的风险。如果你已经做了5年,你已经知道了。如果你没有做过系统工程,那么你应该开始看到你过去的工作在这个领域开始失败。

相关问题