are*_*uit 3 c++ allocation real-time
如果我在堆栈上分配某些内容,分配是否具有确定性(即 RT)?分配示例:
std::vector<double> desiredMobileState(13, 0.0);
我的意思是在堆上分配需要一个系统调用(在一般情况下),这是不确定的,因此应该禁止 RT 行为。
但就 RT 行为而言,堆栈分配会发生什么情况呢?
对象std::vector本身是堆栈分配的,但对象仅包含指向堆分配的数据数组的指针。(当然,C++ 标准从不使用“栈”或“堆”这两个词;上面的句子只是通常的实现。)因此,分配容量为 13 的向量几乎肯定会涉及堆分配。
然而,
在堆上分配需要系统调用(无论系统是什么)
情况不一定如此。大多数堆分配不需要与系统进行任何交互。确实,在大多数系统上,某些堆分配需要系统调用(以修改虚拟内存映射),因此它们不能被视为实时,但很可能想象一个基于非虚拟内存的嵌入式系统,其中应用程序具有固定的内存分配,而 malloc 要么放弃部分内存,要么失败。[注1]
您可以使用自定义分配器从预保留池中分配内存区域,但为了保证 RT,您还需要确保预保留池是内存驻留的。