Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么C++;不建议在空间/辐射环境中使用模板?_C++_Templates_Embedded_Fault Tolerance - Fatal编程技术网

C++ 为什么C++;不建议在空间/辐射环境中使用模板?

C++ 为什么C++;不建议在空间/辐射环境中使用模板?,c++,templates,embedded,fault-tolerance,C++,Templates,Embedded,Fault Tolerance,例如,通过阅读,我理解了为什么在空间或核电站等高辐射环境中不建议动态分配或例外。 关于模板,我不明白为什么。你能给我解释一下吗 考虑到这一点,它说使用起来相当安全 注:我说的不是复杂的标准图书馆资料,而是专门定制的模板。请注意,与空间兼容的(,兼容的)计算设备非常昂贵(包括在太空中,因为它们的重量超过千克),而且单次太空任务可能要花费数亿欧元或美元。由于软件或计算机问题而失去任务通常会带来高昂的成本,因此这是不可接受的,并证明了昂贵的开发方法和程序是合理的,您甚至做梦都不会想到使用这些方法和程序

例如,通过阅读,我理解了为什么在空间或核电站等高辐射环境中不建议动态分配或例外。 关于模板,我不明白为什么。你能给我解释一下吗

考虑到这一点,它说使用起来相当安全


注:我说的不是复杂的标准图书馆资料,而是专门定制的模板。

请注意,与空间兼容的(,兼容的)计算设备非常昂贵(包括在太空中,因为它们的重量超过千克),而且单次太空任务可能要花费数亿欧元或美元。由于软件或计算机问题而失去任务通常会带来高昂的成本,因此这是不可接受的,并证明了昂贵的开发方法和程序是合理的,您甚至做梦都不会想到使用这些方法和程序来开发您的移动电话小程序,因此建议使用和工程方法,因为这些方法在某种程度上仍然是一个“不寻常”的事件。从高层次的观点来看,宇宙线及其产生的位翻转可以被认为是某种抽象形式的信号或输入的噪声。您可以将“随机位翻转”问题视为一个问题,然后可以提供一个有用的概念框架(特别是在元级别,即在分析安全关键源代码或编译的二进制代码时,以及在关键系统运行时,在某些复杂的内核或线程中),并提供一个观点

为什么在空间/辐射环境中不推荐使用C++模板?< /P>

<强>推荐是对C++的编码规则和规则的推荐,以及建议>,它与辐射无关,而是与嵌入式系统相关。由于辐射和振动的限制,任何空间火箭计算机的嵌入式硬件都必须非常小(例如,出于经济和能源消耗的原因,它更像是一个树莓般的Pi系统,而不是一个大的x86服务器系统)。太空硬化芯片的价格是民用芯片的1000倍。在嵌入式计算机上进行空间计算仍然是一项技术挑战(例如,由于相关问题)。因此,在嵌入式软件密集型系统中是不受欢迎的(在这些系统中,您将如何处理内存不足的情况?或者您将如何证明您有足够的RAM用于所有实时运行情况?)

请记住,在安全方面,您不仅以某种方式“保证”或“承诺”,而且肯定会评估(通常使用一些巧妙的概率推理)您自己的软件的质量,还包括用于构建它的所有软件工具的质量(特别是:您的编译器和链接器;波音或空客不会在未事先获得(例如)或的书面批准的情况下更改用于编译飞行控制软件的交叉编译器版本)。您的大多数软件工具都需要以某种方式获得批准或认证

注意,在实践中,大多数C++(但当然不是全部)模板都使用堆。标准C++当然可以。编写不使用堆的模板是一个困难的练习。如果你有能力,可以安全使用模板。(假设您确实信任C++编译器及其模板扩展机制,这是最新C++编译器的C++前端中最棘手的部分,如OR)/< /P> < P>我想,对于类似的(工具集可靠性)的原因,使用许多工具(例如,发出C++或C代码)是不可容忍的。例如,观察到如果使用(或)在一些安全关键软件(由<代码>编译< <代码> >代码> GCC < /code >),则需要评估(并且可能详尽地测试)。不仅是

gcc
make
,还有
bison
。这是一个工程上的原因,而不是科学上的原因。请注意,一些嵌入式系统可能会使用,特别是巧妙地处理输入信号(可能甚至是由于足够罕见的宇宙射线导致的随机位翻转)。验证、测试或分析(或只是评估)这种基于随机的算法是一个相当困难的课题

同时观察并遵守以下事项:

  • C++11(或以下)是一种极其复杂的编程语言。它没有完整的 C++中的专家仅次于世界上几十人(可能是大多数)。 他们中的大多数是在其标准委员会)。我有能力在 C++,但不解释所有微妙的角移动情况 C++中的语义,也需要C++中的许多优化,以便有效地使用。 <> > >强>很难做出一个无错误的C++编译器>,特别是因为C++实际上需要技巧,而且因为C++规范的复杂性。 其中一些(比如最近的GCC或Clang)在实践中相当不错,它们很少(但仍然有一些) 剩余的编译器错误。没有C++的C++++,并且需要一个几百万欧元或美金(但是如果你能收集到这么多的钱,请通过电子邮件联系,例如<代码> Basle。starynkevitch@cea.fr,我的工作电子邮件)。而航天软件行业非常保守

  • <强>很难写出一个好的C或C++堆内存分配器>编码 一个是权衡问题。作为一个笑话,考虑适应C++。

    <2>在C++ C++代码中的安全性属性>(特别是运行时缓冲区溢出或不足)>强> >,在2Q2019中,略高于C++代码的最坏状态>。有几页详细解释了这一点。请注意。

    <> P> <强>一个完整的系统C++嵌入式软件测试<强>可能需要火箭发射(LAA),或者至少在实验室中复杂和繁重的实验。
    template<class T>  fun(T t){
       do_some_thing(t);
    }
    
    fun(b);