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