什么会导致gcc -O2在-O0好的时候不起作用?

时间:2018-02-22 01:04:10

标签: gcc optimization

我有一些C代码,我只是在经过艰苦的努力在Excel中手动执行后验证我的可执行文件通过 var table1 = $('#accledger-table1').DataTable({ "sDom": '<"row view-filter"<"col-sm-12"<"pull-left"l><"pull-right"f><"clearfix">>>t<"row view-pager"<"col-sm-12"<"text-center"ip>>>', columns: [ { data: "1" }, { data: "2", }, { data: "3" }, { data: "4" }, { data: "5" }, { data: "6" }, { data: "7" }, { data: "8" }, { data: "9" }, { data: "10" }, { data: "11" }, { data: "12" }, { data: "13" } ], destroy: true, sort: false, }); table1.clear().draw(); for (var i = 0; i <= RetObject.ACC_LEDGER.length - 1; i++) { var ledger = RetObject.ACC_LEDGER[i]; table1.rows.add([{ "1": ledger.1, "2": ledger.2, "3": ledger.3, "4": ledger.4, "5": ledger.5, "6": ledger.6, "7": numberWithCommas(ledger.7), "8": numberWithCommas(ledger.8), "9": numberWithCommas(ledger.9), "10": numberWithCommas(ledger.10), "11": numberWithCommas(ledger.11), "12": numberWithCommas(ledger.12), "13": ledger.REMARKS, }]).draw(false); } 编译正确运行但如果我使用gcc -O0编译我的输出是坏的。

可能是什么原因引起的? 到目前为止,我已经将问题追溯到它读取数据的位置, 这是因为它读取的输入文件总数,我读到的每一行数据(文本文件中的数字)都会立即打印到标准输出并重定向到名为O0.txt或O2.txt的文件中。如果我比较这些文件,当我希望看到完全相同时,我会发现数字存在显着差异。

这是gcc-4.3.4 suse linux

这是代码的代码段,用于显示与-O2无关的内容,但它可以根据-O2与-O0一起使用,并将输出重定向到{{1} }或printf

O0.txt

1 个答案:

答案 0 :(得分:0)

我在读取例程中发现了错误,这不是编译器问题。

虽然出于某种原因,问题并未表现为使用2 3 3 3 . . . 上的1 2 3 4 5 或之后的任何内容进行编译。

以上代码代码段甚至已经更正,必须具有隧道视野, 原始源代码中的问题是

-O2

没有使用gcc-4.8.5选项使用/* here was the problem in original code */ for ( r = 0; r < r; r++ ) /* skip past header */ fgets( line, LS, fp ); 跳过标题,但可以使用gcc_4.3.4-O2

-O0

我在使用-O1 -O2- did allow the program to read in all the data from the file correctly and the program ran correctly when compiling with gcc-4.8 {sles 11.4 installed by novell update} gcc-5 {sles 11.4 installed by novell update} gcc-4.8.5 {native in sles 12.3} gcc 7.x as of 2018-02-20 manually built from source 编译的sles 11.4中运行了原始代码