Jee*_*tel 9 c embedded memory-management realloc
在为嵌入式系统开发软件时,我realloc()多次使用了函数.现在我被告知我"不应该realloc()在嵌入式中使用"而没有任何解释.
realloc()嵌入式系统是危险的,为什么?
Lun*_*din 20
是的,所有动态内存分配都被认为是危险的,并且它被禁止用于大多数"高完整性"嵌入式系统,例如工业/汽车/航空/医疗技术等等.您的问题的答案取决于什么样的嵌入式系统你在干嘛
它被高度完整性嵌入式系统禁止的原因不仅是潜在的内存泄漏,而且还有许多与这些函数相关的危险的未定义/未指定/ impl.defined行为.
编辑:我也忘了提到堆碎片,这是另一个危险.此外,MISRA-C还提到"数据不一致,内存耗尽,非确定性行为"作为不应该使用它的原因.前两者似乎相当主观,但非确定性行为绝对是这类系统所不允许的.
参考文献:
这取决于特定的嵌入式系统.一个小型的嵌入式系统的动态内存管理是棘手的开始,但realloc只不过是一个更加复杂free和malloc(当然,这不是它做什么).在某些嵌入式系统上,您从未梦想malloc过首先打电话.在其他嵌入式系统上,你几乎假装它是一个桌面.
如果您的嵌入式系统配置不佳或内存realloc不足,则可能会导致碎片问题.这也是你避免的malloc原因,因为它会导致同样的问题.
另一个原因是某些嵌入式系统必须具有高可靠性,并且malloc/ realloc可以返回NULL.在这些情况下,所有内存都是静态分配的.
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |