小编Pum*_*kin的帖子

在处理表达式时如何检查Ada中的潜在溢出?

我对Ada相对较新,并且一直在使用Ada 2005.但是,我觉得这个问题与所有语言相关.

我目前正在使用Codepeer等静态分析工具来解决代码中的潜在漏洞.

我正在讨论的一个问题是如何在分配可能导致变量溢出的表达式之前处理检查.

通过示例可以更好地解释这一点.假设我有一个无符号32位整数类型的变量.我正在为这个变量CheckMeForOverflow分配一个表达式:

CheckMeForOverflow := (Val1 + Val2) * Val3;
Run Code Online (Sandbox Code Playgroud)

我的困境是如何在这种情况下有效地检查溢出 - 这似乎在代码中经常出现.是的,我可以这样做:

if ((Val1 + Val2) * Val3) < Unsigned_Int'Size then
    CheckMeForOverflow := (Val1 + Val2) * Val3;
end if;
Run Code Online (Sandbox Code Playgroud)

我的问题是,检查表达式似乎效率低,然后在没有溢出可能的情况下立即分配相同的表达式.

但是,当我在网上看时,这似乎很常见.谁能解释更好的替代方案或解释为什么这是一个不错的选择?我不想把它分散在我的代码中.

我还意识到我可以创建一个更大类型的另一个变量来保存表达式,对新变量进行评估,然后将该变量的值分配给CheckMeForOverflow,但是再次,这将意味着创建一个新变量并将其用于执行一次检查,然后再也不再使用它.这似乎很浪费.

有人可以提供一些见解吗?

非常感谢!

ada

5
推荐指数
2
解决办法
301
查看次数

标签 统计

ada ×1