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