在嵌入式系统中,强烈建议不要使用动态分配。关键系统的行为应该是确定性的。嵌入式固件的许多库和操作系统都避免使用动态分配。
简单解释为什么malloc不适合嵌入式系统,请参阅: malloc罪
关键系统的标准可能禁止将malloc用作糟糕的编程习惯。
例如,MISRA C1和MISRA C2不允许使用malloc / calloc。看到 MISRA 标准。
Q&安培; A: 动态内存分配 - MISRA公告栏
像这样的系统中的malloc没有任何意义。在进行包含资源分配的系统工程时。作为单个任务,一个任务拥有系统中的所有资源。因此,在设计时,您需要确定每个需要多少,包括内存。在运行时很久之前,您已经知道哪些结构可以获得多少内存,因此没有理由为已经知道答案的内容添加额外代码的风险。如果你已经这样做了5年,那么你已经知道了。如果您还没有进行过系统工程,那么您应该开始看到过去的工作开始在现场失败。
不,它没用。整个目的 malloc 是让多个进程在需要时动态共享系统的所有可用RAM内存。这反过来意味着您拥有一个多进程系统,并且可用RAM的数量巨大,但也可变或未知。
malloc
在较小的“裸机”(无操作系统)或使用RTOS的嵌入式系统中,这种内存共享没有任何意义。与PC不同,这样的嵌入式系统是完全确定的,因此您总是知道最坏情况下所需的RAM量。您还确切知道芯片上有多少RAM。
需要使用 malloc 在这样的系统上,通常来自困惑的PC程序员,他们已经选择了嵌入式编程而没有先研究它。
细节在这里 。