安全关键项目不建议任何动态分配或释放分配的内存。仅在程序执行的精化/初始化阶段,才允许。
我知道你们中的大多数人都会争论实施SW,它应该只进行所有静态分配,或者在代码中做一些理由,动态分配不会损害整个程序等等但是,还有什么替代方案问题?有什么方法或任何例子可以在程序初始化/详细说明期间分配一些(堆)内存并从那里分配/释放内存?如果我们真的想在(安全关键)项目中进行动态分配,还是解决这个问题的任何解决方案/替代方案?
答案 0 :(得分:11)
这种类型的问题最常由想要能够在安全相关系统中使用动态内存分配的开发人员提出,而不需要过多的问题。限制 - 这通常意味着它们不会被阻止以他们选择的数量动态分配内存,当他们选择时,以及(可能)在他们选择时释放内存。
我将首先解决这个问题(动态内存分配是否可以在关键系统中无限制地使用?)。然后,我将回到选项,包括接受对动态内存分配的使用方式(何时或如果)的一些限制。
在一个"安全关键项目"中,这种事情通常是不可能的。安全相关系统通常具有与减轻或消除特定危险有关的强制性要求。未能充分减轻或消除特定危害(即满足要求)可能导致伤害 - 例如,人员死亡或受伤。在这样的系统中,通常需要在某种程度上严格地确定危险被适当且可靠地减轻或消除。其结果通常是与确定性相关的一组要求 - 通过适当的分析确定系统以特定方式完成操作的能力 - 其中行为和时间等属性被严格规定。
如果使用动态内存分配而没有限制,则很难确定系统的某些部分是否按要求运行。问题类型包括;
所有这些因素以及更多因素意味着无限制的动态内存分配在系统的定时或资源使用的确定性要求中不能很好地工作。本质上,系统要求需要施加一些限制,并且根据系统的不同,强制执行。
如果可以接受对动态内存分配的限制,可以选择。通常,这些技术需要在政策约束和技术解决方案方面提供支持,以鼓励(优选地在高关键性系统中强制执行)遵守这些策略。策略执行可能是技术性的(例如自动和手动设计和代码审查,定制的开发环境,合规性测试等)或组织(例如,解雇那些故意围绕关键策略工作的开发人员)。
技术示例包括;
其中一些方法可以互相支持。