当前位置:  技术问答>linux和unix

g++编译优化选项-O2对位域操作的影响

    来源: 互联网  发布时间:2017-05-15

    本文导语:  最近在linux环境下做开发,碰到一个奇怪的问题。在用g++编译时,使用-O2选项和不使用此选项程序执行的结果竟然不一样。通过分析,发现问题可能出在-O2编译选项对位域操作的影响上,但具体为什么解释不了,看那...

最近在linux环境下做开发,碰到一个奇怪的问题。在用g++编译时,使用-O2选项和不使用此选项程序执行的结果竟然不一样。通过分析,发现问题可能出在-O2编译选项对位域操作的影响上,但具体为什么解释不了,看那位能帮忙分析一下。贴上测试代码

//Test.cpp
#include 
struct stTest
{
unsigned int sx : 8;
unsigned int sy : 8;
unsigned int lx : 6;
unsigned int ly : 6;
unsigned int sc : 4;
};

unsigned int Test()
{
stTest s;
s.sx = 1;
s.sy = 2;
s.lx = 3;
s.ly = 4;
s.sc = 5;

return *(unsigned int *)&s;
}

int main()
{
unsigned int uiTmp = Test();
printf("%u", uiTmp);
return 0;
}

g++ test.cpp
./a.out
执行结果:1359151617

g++ -O2 test.cpp
./a.out
执行结果:1359152608

|
编译运行结果:1359151617
                             1359151104(g++ -O2)
g++版本:4.1.2
看来-O2确实对位移进行了部分优化,不同的编译器版本优化的程度不一样。

|
无法重现
gcc 版本 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC)
[jimmy@xxxxxxx  workspace-cpp]$ g++ a.cpp
[jimmy@xxxxxxx workspace-cpp]$ ./a.out
1359151617[jimmy@G08FNSTD131714 workspace-cpp]$ g++ -O2 a.cpp
[jimmy@xxxxxxxx workspace-cpp]$ ./a.out
1359151617

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,