当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > CFLAGS参数详解(Desktop cflags)

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

Unix/Linux 中的 CFLAGS参数详解(Desktop cflags)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 45 ::
收藏到网摘: n/a

相信使用lfs,gentoo的用户对CFLAGS这个东东会比较了解 :)不少Linuxer对Gentoo,LFS的印象是速度比其他发行版要快的多!  而这个CFLAGS就是达到最佳效能的东东。 如果你想编译出的程序更快,运行的更好。快来挑选出最符合自己的CFLAGS吧! ^_^
CFLAGS 简介 CFLAGS 是决定 Gentoo 系统效能与稳定的关键之一。恰当的 CFLAGS 能在效能、编译时间、与系统稳定度中取得平衡,失败的 CFLAGS 可能导致编译失败,甚至系统损毁。那么,在茫茫 CFLAGS 海中,如何才能捞到命中注定那根针呢? 此文件的 CFLAGS 针对 x86 与 x86-64 平台上的 GCC 3.4 (GNU Compiler Collections - http://gcc.gnu.org/) 为主,若您使用其它编译器 (如 icc、compaq c compiler) 或其它平台 (如 PowerPC、Alpha),本章可能 50% 以上的东西您都用不上。 各位请先参考笔者从网络上整理出,有关服务器与工作站需求的信息。当然,服务器或桌面的需求绝对不只这些,这里仅列出跟设计 CFLAGS 比较有关的项目。以下是整理出的列表: 1. 服务器系统: * 长时间启动 (一天 24 小时,一年 365 天,全年无休) * 非常稳定 (uptime 在 99.999% [注] 以上) * 高安全性 (别怀疑,CFLAGS 跟安全性也有很大的关系) * 在长时间启动的前提下,能自己照顾自己。 * 效能不是第一考虑 * 互动反应不用很快,够用就好。 2. 桌面、工作站: * 启动时间没有那么长 (使用者要用的时候才开机) * 可以不用那么稳定 (多半有使用者直接在处理,uptime 可以降到 99.99% 或更低) * 效能也是考虑重点 * 互动反应快 (如加载一页网页,与其让他在三秒时整面显示出来,不如让它每秒显示一点可是在四秒时才全部显示完毕。) 所以,得到了桌面系统的 CFLAGS 设计要点: 1. 程序启动时间短 2. 反应速度快 3. 效能高 4. 稳定可以稍差 (容许范围内) 减少执行档的大小,可以同时减少了内存用量,也节省了一些磁盘空间。同时,桌面系统最大的效能瓶颈就在磁盘驱动器,减少档案大小也间接降低了磁盘的存取次数,可以加速程序的启动,提升第一次执行的反应速度。 [编辑] CFLAGS 选项 再来,让我们看看 gcc 中关键的几个选项。这里只简单介绍这些选项的功能,若要详细说明请参考 man gcc。 增加选项的数量,同时也增加编译的时间。所有的选项都会增加编译时间,有特别说明 "会增加编译时间" 的选项,表示会增加 "大量的" 编译时间 (跟其它选项比起来...)。 [编辑] 比较安全的选项 首先是安全的选项: * 指令 o 参数与用法 [注二] o 说明 o 建议 * -O o -O (-O1), -O0, -O2, -O3, -Os o 依照后面数字的大小,针对效能最佳化的程度也不同 (稳定度也可能递减)。其中 -Os 是个比较特殊的等级,针对原始码大小最佳化。 o 可使用 -Os,降低程序加载的时间。 * -fforce-mem -fforce-addr o -fforce-mem, -fno-force-mem -fforce-addr, -fno-force-addr o 强制在运算前将内存中的数值 (mem) 或内存位置 (addr) 复制到缓存器中。启动这两个选项可以做出较好的程序代码。 o 这两个是好东西,启动它们!其中 -fforce-mem 已在 -O2, -O3, -Os 中启动,所以若您有用这三个选项的其中一个,只要 -fforce-addr 就够了。 * -fomit-frame-pointer o -fomit-frame-pointer, -fno-omit-frame-pointer o 若非必要,不将函式的 frame pointer 放进缓存器中。这将避免您的程序储存、设定、以及还原 framepointer;也在许多函式中省下一个缓存器。这个选项可能让某些平台上的除错工作变成不可能!。若平台支持不使用 frame pointer除错,这个选项将在 -O, -O2, -O3, -Os 中启动。 o 很抱歉,x86 刚好是非这个不可才能除错的平台之一。但是... 您想对您的桌面进行除错吗?若答案为非,您可以放心启动这个选项。 * -finline-functions o -finline-functions, -fno-inline-functions o 将所有简单的函式整合进呼叫他们的函式中。编译器会自动试探并决定那些函式值得被整合。于 -O3 时启动。 o 虽然这个选项会增加程序大小,但是他却是个增进效能的好东西。我建议您在这里启动它,然后使用下面一个指令指定 inline 条件。 * -finline-limit o -finline-limit=n o n 为决定函式是否能被 inline 的伪指令长度。预设的值为 600。 o 这个数值越小,程序启动的速度越快,但是运算的速度越慢。作为桌面使用,我建议 -finline-limit=400。 * -fmove-all-movables -freduce-all-givs o -fmove-all-movables, -fno-move-all-moveables -freduce-all-givs, -fno-redduse-all-givs o 这两个是循环最佳化技术,将无关循环内容的运算改在循环外执行。编译出的执行档可能更快也可能更慢,结果跟程序的写法有很大的关系。 o 虽然说效能跟程序写法有关,但是大部份的状况下这两个选项会做出比较小与比较快的程序代码,所以我建议您启动他们! * -freorder-blocks -freorder-functions o -freorder-blocks, -fno-reorder-blocks -freorder-functions, -fno-reorder-functions o 藉由重新编排程序区块来增进效能以及减少执行档大小。 o 这两个也是好东西,所以我建议您启动它们。缺点是会让编译时间变长。