我们的一个实时应用程序出现了问题。想法是每2ms(500 Hz)运行一个线程。在应用程序运行了半小时左右后,我们注意到该线程落后了。
经过一些讨论,人们抱怨实时线程中的malloc分配,或者根本原因是malloc分配。
我想知道,在实时线程中避免所有动态内存分配总是一个好主意吗?
Internet对此资源很少?如果您可以提出一些讨论,那我们也将非常有用。
谢谢
[第一步是分析代码,并确保您确切地了解瓶颈所在,您可以自己自己检测一下例程的几个部分,并以固定间隔转储最小/平均/最大持续时间。您想查看最坏的情况(最大),以及平均持续时间是否随着时间的流逝而增加。
取决于对象的寿命短,可以浪费多少内存以及预先知道多少需求,可以采用几种方法:
常规用途分配(标准库或任何第三方实现中的malloc
):如果您的RAM数量“足够”,许多短期对象并且没有严格的延迟要求,则是最佳方法
内存池
O(1)
,不会出现碎片,更容易预先计划其大小,在运行时分配失败(很可能)更容易缓解单个静态分配的对象