c++ - 堆栈分配是 RT 吗?

标签 c++ real-time allocation

如果我在堆栈上分配一些东西,分配是确定性的(即 RT)吗?分配示例:

std::vector<double> desiredMobileState(13, 0.0);

我的意思是在堆上分配需要一个系统调用(在一般情况下),这是不确定的,因此应该禁止 RT 行为。

但是在 RT 行为方面堆栈分配会发生什么情况?

最佳答案

std::vector 对象本身是堆栈分配的,但该对象仅由指向堆分配数据数组的指针组成。 (当然,C++ 标准从不使用“堆栈”或“堆”等词;上面这句话只是通常的实现。)因此分配容量为 13 的 vector 几乎肯定会涉及堆分配。

但是,

allocating on the heap requires a system call (whatever the system)

不一定如此。大多数堆分配不需要与系统进行任何交互。的确,在大多数系统上,一些堆分配需要系统调用(修改虚拟内存映射),因此它们不能被认为是实时的,但很有可能想象一个非基于虚拟内存的嵌入式系统,其中应用程序具有固定的内存分配,而 malloc 要么交出部分内存,要么失败。 [注1]

您可以使用自定义分配器,从预留池中分配内存区域,但为了保证 RT,您还需要确保预留池驻留在内存中。


注释。

  1. 或者你可以只记得 DOS/Apple;无需生动的想象力。

关于c++ - 堆栈分配是 RT 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700770/

相关文章:

c++ - 创建类时不能在返回类型中定义新类型

c++ - std::set 中索引处的元素?

创建一个函数来分配动态矩阵

objective-c - 是什么原因导致 "Virtual Memory exhausted"错误?

erlang - ejabberd 如何处理消息排序和传递?

c++ - munmap_chunk() : invalid pointer when using function templates

c++ - 在 VS14 中排序不能正常工作,而在 VS10 中可以吗?

c++ - X 在此函数中使用未初始化

c# - Visual Studio 中的集中实时协作编辑

asp.net-mvc - 实时 ASP.NET MVC Web 应用程序