"-ftrapv"和"-fwrapv":哪种效率更高?

Dov*_*iin 6 c++ gcc gnu g++ integer-overflow

来自GNU的网站:

-ftrapv
This option generates traps for signed overflow on addition, subtraction, multiplication operations. 
-fwrapv
This option instructs the compiler to assume that signed arithmetic overflow of addition, subtraction and multiplication wraps around using twos-complement representation. This flag enables some optimizations and disables others.
Run Code Online (Sandbox Code Playgroud)

我有两个问题.1)哪些选项更适合性能?2)当-ftrapv定义说它产生"陷阱" 时,它意味着什么?这是否意味着例外?(我猜不是,但值得问.)

资料来源:https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html

小智 9

整点这两个选项是给优化器更小的回旋余地比通常有.因此,除非您在优化器中遇到错误,否则最快的应该是两者都不使用,优化器假定您的代码没有任何溢出,并且不会发出代码来处理溢出.

当-ftrapv定义说它产生"陷阱"时,它意味着什么?这是否意味着例外?

它并不意味着C++异常.它是依赖于目标的,但假设是x86,这意味着GCC运行时库会引发SIGABRT,这通常会中止您的程序.在其他平台上,它可能会使用导致硬件异常的特殊CPU指令.它主要用于调试目的,也许在少数情况下是安全的,其中溢出后继续的风险大于程序突然终止的风险.

  • 问题不在于“发出代码来处理溢出”,因为所有现有的机器都是二进制补码。相反,对于某些特殊情况,它错过了优化机会。但是,有一个选项可以告诉它无论如何优化循环(抱歉我不记得选项名称)。 (2认同)