Loe*_*rio 11 c++ assembly flags integer-overflow
在执行数学运算之后,比如乘以两个整数,是否可以使用C++访问CPU中的溢出标志寄存器?如果没有其他快速方法来检查溢出?
我建议在每个适当的情况下阅读.来自 C++中的优化软件 -
整数溢出是另一个安全问题.官方的C标准说在溢出的情况下有符号整数的行为是"未定义的".这允许编译器忽略溢出或假设它不会发生.在Gnu编译器的情况下,假设没有发生有符号整数溢出会产生令人遗憾的结果,它允许编译器优化掉溢出检查.针对这个问题有许多可能的补救措施:(1)在发生溢出之前检查溢出,(2)使用无符号整数 - 它们保证环绕,(3)使用选项捕获整数溢出
-ftrapv,但这是非常低效的,(4)使用选项获取此类优化的编译器警告-Wstrict-overflow=2,或(5)使用选项-fwrapv或使用明确定义的溢出行为-fno-strict-overflow.