LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2342|回复: 8

关于这样 gcc -O3 和-O2 -Os 的说法对吗

[复制链接]
发表于 2007-3-4 01:07:35 | 显示全部楼层 |阅读模式
在 x86 系列cpu采用 -O3 并不是一种好的选择。因为 x86 系列cpu缺乏足够寄存器,-O3 会导致代码变慢。

另外,-O3 包含了 -finline-functions,这会使目标代码不必要地膨胀,从而导致执行变慢。

所以在 x86 系列 cpu 采用 -O2 和 -Os 的效果比 -O3 好。

建议 CFLAGS 设置如下:
CFLAGS="-O2 -march=pentium4 -pipe"


/etc/make.conf 中 LDFLAGS 的设置对性能有较大的影响。

1、基础优化:

LDFLAGS="-Wl,-O1"

这种优化设置非常安全,不会有什么问题。

2、通过"—as-needed"加快软件载入速度:

LDFLAGS="-Wl,-O1 -Wl,--as-needed"

在这种优化设置中,加入了--as-needed参数,这将避免软件连接多余的库,从而大大提升软件的载入速度,特别是 KDE 和 GNOME 这类大型软件的载入速度。
这是我喜爱的一种优化方案。
需要注意的是,由于有些软件包不支持 --as-needed 参数而导致 emerge 失败,在构造这类软件包时需要取消 --as-needed 参数。
发表于 2007-3-4 01:18:00 | 显示全部楼层
我就直接-O5了
回复 支持 反对

使用道具 举报

发表于 2007-3-4 01:31:02 | 显示全部楼层
感觉对于 -O3 的解释比较牵强。

-O3 引入了 more aggressive optimization ,有些可能只适用于计算类程序,未必能优化所有代码。而 inline function 就是为了解决函数调用所带来的开销,如使用正确,虽然增大了目标文件的体积,但应该对效率有好处。

另外记得目前的 gcc 中 -O#(#>=3)=-O3 ,所以写很大的数没有意义。
回复 支持 反对

使用道具 举报

发表于 2007-3-4 13:42:58 | 显示全部楼层
-wl是什么意思?
回复 支持 反对

使用道具 举报

发表于 2007-3-4 22:04:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2007-3-5 00:55:09 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2007-3-5 01:22:42 | 显示全部楼层
-O3 is the highest optimization level available in GCC.
回复 支持 反对

使用道具 举报

发表于 2007-3-5 07:23:22 | 显示全部楼层
amd64
LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -s"

暂时没出现什么错误,一切正常。。。
回复 支持 反对

使用道具 举报

发表于 2007-3-12 15:53:07 | 显示全部楼层
能否分享晨想大哥的make.conf?
如果某个软件用Wl,--as-needed出错,如何单独禁用这个软件使用Wl,--as-needed参数呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表