溢出数据结构

时间:2014-01-20 09:26:50

标签: overflow

每个人都知道编程语言中的溢出,如果它发生,程序就会崩溃。然而,我不清楚实际上数据是否超出边界。你可以解释一下,说一下C ++或Java的例子。例如,Integer可以保存最多4个字节,如果将数据超过4个字节放到Integer会发生什么。编译器如何识别这种未定义的行为?

1 个答案:

答案 0 :(得分:1)

  

如果将数据超过4个字节放入Integer会发生什么。

通常值将翻转 1 ,这意味着它将从其范围的一端跳到另一端。

即使在Windows计算器中也可以看到这一点。从最高可能的签名 32位值开始:

enter image description here

现在添加一个:

enter image description here

我们溢出有符号Dword的最大值(2 31 -1)。

1 - 这是典型的结果。某些体系结构实际上可能会在整数溢出时生成异常,因此您不应指望此行为。


  

编译器如何识别这种未定义的行为?

编译器不会识别它。那就是问题所在。 C#可以使用checked关键字来缓解这个问题,该关键字检查以确保对整数执行的任何算术都不会导致上溢/下溢。