首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc根据优化创建崩溃代码。

gcc根据优化创建崩溃代码。
EN

Stack Overflow用户
提问于 2015-03-17 14:56:16
回答 1查看 1.3K关注 0票数 2

我有一个相当复杂的多线程代码,我使用gcc 4.8.1编译它。在编译时

代码语言:javascript
复制
g++ -c file.cc -march=native -mfpmath=sse -mpreferred-stack-boundary=4
--param inline-unit-growth=50 -ggdb3 -Wall -Wextra -Winit-self
-O2 -fPIC -funroll-loops -fforce-addr -rdynamic

生成的代码与分段错误(我无法调试,但结构的地址突然不同,特别是构造时,不再对齐代码所要求的32字节,但只有8字节)。

使用-O1编译时,代码工作正常。然后,我添加了所有在-O1-O2之间产生差异的优化标志。(为此,我创建了两个文件O1-optsO2-opts

代码语言:javascript
复制
g++ -march=native -mfpmath=sse -mpreferred-stack-boundary=4
--param inline-unit-growth=50 -ggdb3 -Wall -Wextra -Winit-self
-O1 -fPIC -funroll-loops -fforce-addr -rdynamic
-Q --help=optimizers > O1-opts

g++ -march=native -mfpmath=sse -mpreferred-stack-boundary=4
--param inline-unit-growth=50 -ggdb3 -Wall -Wextra -Winit-self
-O2 -fPIC -funroll-loops -fforce-addr -rdynamic
-Q --help=optimizers > O2-opts

diff O1-opts O2-opts提供选项差异时)。当将所有选项差异添加到-O1时,生成的代码仍然不会崩溃。这让我很困惑。所以我的问题是:这不应该给出与-O2完全相同的结果吗?(还有:我的问题可能是什么原因?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 15:38:01

要点是,-O2选项不仅设置不同的标志,而且还支持与-O1不同的额外优化。

GCC Wiki的FAQ部分为提供了适当的条目。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29102414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档