为什么我在运行Polyspace(或自R2013b以来的Polyspace Code Prover)验证时收到“内存不足”错误?

12次浏览(最近30天)
当使用Polyspace Code Prover(或简单的Polyspace在R2013b之前),当查看Polyspace日志文件时,我看到响应“run out of memory”。从那时起,我尝试运行相同的代码集两次。第一次没有修改,最后一次只修改了应用程序代码。这两次尝试都以同样的失败告终。同时,我成功地运行了几个不同的代码集,没有出现任何问题。我不确定我是否遗漏了什么。

公认的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2020年8月6日
可以设置以下选项来帮助您完成此操作:
1.(17a之前)“优化大型静态初始值设定项”(内部选项名称:-无折叠)
当使用大量静态初始化定义变量时,在编译阶段可能会出现缩放问题。如果需要,此选项近似于整数、浮点和字符类型(包括字符串)数组类型的初始化。它可以加快分析速度,但在某些应用中可能会降低精度
默认值:未设置选项。
Shell脚本入口示例:
(在R2013b之前)polyspace-c -no-fold…
(自R2013b起)polyspace代码验证程序节点SKTOP-无折叠。。。
2.“精度等级”(-O)
此选项指定要使用的精度级别。它提供了更高的选择性,以换取更多的分析时间,从而使结果审查更有效,从而使代码中的错误更容易隔离。它通过指定用于在分析期间对程序状态空间建模的算法来实现此目的。
建议分析应以低精度开始。然后,在使用此选项重新启动Polyspace之前,可以解决红色错误和灰色代码,并应用如下所述的精度级别。
好处——更高的精度水平有助于更高的选择性,使结果审查更有效,从而使代码中的错误更容易隔离。—精度越高,分析时间越长
-O0对应于静态区间分析。
-O1对应于域值的复多面体模型。
-O2对应的是更复杂的算法来紧密模拟域值(一种整数格和复杂多面体的混合方法)。
-O3只适合小代码。对于这样的代码,所产生的选择性可能会达到很高的值,比如98%,从而导致非常长的分析时间,比如每1000行代码需要一个小时。
默认值:- 02
3.(17日)之前“降低任务复杂性”(-轻量级线程模型)用于多任务验证。
允许简化Polyspace代码验证器中的任务建模。
自R2013b以来,其他选项可作为“额外选项”(在“其他Polyspace选项”中指定)或早期版本的常规选项:
4.“结构内部验证深度”(-k-限制)
这是一个可伸缩的选项,在指针分析期间限制对嵌套结构的分析深度。
此选项仅适用于多空间C和C++。
默认值:没有固定的限制。
Shell脚本入口示例:
多空间码验证器nodesktop-k限制1。。。
在上面的例子中,分析只精确到一层嵌套。
3.-respect-types-in-fields
这是一个可伸缩的选项,旨在帮助处理复杂的代码。当应用它时,Polyspace假定没有声明为包含指针的结构字段永远不会用于保存指针值。这个选项应该只在类型安全的C/ c++代码中使用,当它不会导致精度损失时。参见-respect-types-in-globals
默认值:Polyspace假设结构字段可能包含指针值。
4.-respect-type-in-globals
这是一个可伸缩的选项,旨在帮助处理复杂的代码。当应用该方法时,Polyspace假定未声明为包含指针的全局变量永远不会用于保存指针值。这个选项应该只在类型安全的C/ c++代码中使用,当它不会导致精度损失时。也看到-respect-types-in-fields。
默认值:Polyspace假定全局变量可能包含指针值。
请注意,当遇到内存不足的问题时,建议减少给予Polyspace的应用程序的大小。
本文对此进行了解释:

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!