美文网首页
gcc -fwrapv 参数的含义

gcc -fwrapv 参数的含义

作者: sarto | 来源:发表于2022-09-18 19:05 被阅读0次

该问题参考stackoverflow

该参数含义为:代码中存在溢出并已经考虑,编译器不要对可能溢出的情况进行优化。

例如这段代码,我们可能由于编写失误,认为该函数将永远返回 1。在不带 fwrapv 的情况下,编译器将为我们默认规避掉这种失误,将代码优化为直接返回 1.

而带 fwrapv 的情况下,明确告知编译器我们已经考虑了该情况,请不要进行该优化。则编译器将始终进行 i+1 和 i 的比较。

int gt(int i )
{
    return i+1>i;
}

在 loongarch64 平台上进行验证。可以看到,在不带 fwrapv 的情况下,汇编器直接将 1 作为返回值。
而在携带 fwrapv 的情况下,汇编器始终将 i+1 和 i 进行比较,然后将结果返回。

merore@merore-pc:~/wk/test$ gcc -S -Os a.c -o nowrapv.s
merore@merore-pc:~/wk/test$ cat nowrapv.s 
gt:
    addi.w  $r4,$r0,1           # 0x1
    jr  $r1

merore@merore-pc:~/wk/test$ gcc -S -fwrapv -Os a.c -o wrapv.s
merore@merore-pc:~/wk/test$ cat wrapv.s 
gt:
    addi.w  $r12,$r4,1
    slt $r4,$r4,$r12
    jr  $r1

相关文章

  • gcc参数

    -D_REENTRANT 在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获...

  • gcc - lm的含义

    使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件...

  • mac makefile "multiple Lua VMs d

    macosx和linux的gcc编译参数不同"multiple Lua VMs detected"gcc -Wal...

  • GCC 参数的使用

    GCC参数的使用 gcc 主要有三个参数-E -S -c -o -l 以及不加参数四个阶段:预处理(也称预编译,...

  • gcc参数详解

    gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步...

  • linux系统中gcc的命令

    Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数...

  • 关于GCC

    本文参考: gcc编译器学习记录 gcc的使用简介与命令行参数说明 1. 什么是GCC? The GNU Comp...

  • GO-SQLITE3 ARM平台交叉编译

    交叉编译GCC、G++安装 静态编译参数

  • gcc -l参数和-L参数

    -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,...

  • G++/GCC参数

    -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. 例子用法:gcc -E hello...

网友评论

      本文标题:gcc -fwrapv 参数的含义

      本文链接:https://www.haomeiwen.com/subject/qmvportx.html