几个月前,我开始在C开发空间系统的软件,用于空间应用,也用于C++的微控制器.在这样的系统中有一条经验法则是one should never create heap objects(因此没有malloc/new),因为它使程序non-deterministic.当人们告诉我这件事时,我无法证实这句话的正确性.那么,Is this a correct statement?

对我来说,念力的关键在于,据我所知,决定论意味着将一个程序运行两次将导致完全相同的执行路径.根据我的理解,这是多线程系统的问题,因为多次运行同一个程序可能会导致不同的线程每次都以不同的顺序运行.

推荐答案

在实时系统的上下文中,决定论不仅仅是一条可重复的"执行路径".另一个必需属性是关键事件的时间是有界的.在硬实时系统中,发生在允许时间间隔之外的事件(在该时间间隔开始之前或结束之后)表示系统故障.

在这种情况下,使用动态内存分配可能会导致不确定性,特别是当程序具有不同的分配、释放和重新分配模式时.分配、解除分配和重新分配的时间可能会随着时间的推移而变化,因此使整个系统的时间无法预测.

C++相关问答推荐

try 使用libusb控制音量时LIBUSB_WRIGHT_PIPE

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

在Windows上构建无聊的SSL x64

无效使用未定义类型'structsquare'?

malloc实现:判断正确的分配对齐

我编译了一个新的c程序,并收到以下错误

模拟shell并运行.sh文件

C lang:当我try 将3个或更多元素写入数组时,出现总线错误

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

等同于铁 rust 的纯C语言S未实现!()宏

如何读取文件并将内容保存在字符串中?(在C语言中,没有崩溃或核心转储错误)

-Wnonnull-Compare警告不是具有误导性吗?

通过k&;r语法的c声明无效

用C++高效解析HTTP请求的方法

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

使用mmap为N整数分配内存

C struct 中的冒泡排序

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

在带中断的循环缓冲区中使用 易失性