【发布时间】:2016-11-21 23:50:49
【问题描述】:
C 标准说算术溢出是未定义的。
我想知道如何以性能友好的方式实现环绕算法。这意味着像 here 这样的溢出检查解决方案不是一种选择(因为它们会使操作减慢大约一个数量级)。
我认为解决方案将涉及编写一个汇编例程来执行此操作。是否有可用的库来执行此操作(最好用于多种架构,尽管 x86 是必须的)?
或者,是否有编译器标志(用于 gcc 和 clang)使编译器强制执行整数运算的环绕语义?
【问题讨论】:
-
“C 标准说算术溢出是未定义的。” - 大错特错!
-
在总是定义溢出的地方使用
unsigned整数或使用-fwrapv编译以获得有符号整数的可靠环绕溢出。
标签: c integer-overflow integer-arithmetic