BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

GCC 4.9发布,完整支持Go 1.2.1

| 作者 臧秀涛 关注 4 他的粉丝 发布于 2014年4月24日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

GCC 4.8发布一年零一个月之后,GCC 4.9终于发布了。

GCC 4.9是一个主要版本,提供了大量新功能。下面我们来看一下:

通用的优化器改进

  • AddressSanitizer这款快速的内存错误检查程序已经支持ARM。
  • 添加了UndefinedBehaviorSanitizer(ubsan),这是一款快速的未定义行为检查程序,可以通过-fsanitize=undefined开启。它可以在运行时诊断未定义行为,目前支持C和C++。
  • LTO(Link-time optimization,链接时优化)的改进:
    • 重写了类型合并(Type merging),新实现在极大提升速度的同时减少了内存使用量。
    • 提早去掉虚方法,减少了目标文件的大小,而且改进了链接时的内存使用量和编译时间。
    • 函数体可以根据需要提早加载和释放,改进了链接时的内存使用量。
    • C++隐含的跟虚函数处理有关的key方法现在可以优化掉了。
    • 在使用链接器插件时,使用-flto选项编译,会生成较为轻巧的目标文件,其中仅包含支持LTO的中间语言表示。可以使用-ffat-lto-objects选项来创建包含其他目标代码的文件。

      在构建支持调试的Firefox时,占用的内存从15GB减少到3.5GB,链接时间从1700秒减少到350秒。这一点让开发者非常兴奋

  • 跨过程优化的改进:
    • 新的类型继承分析模块,改进了去虚化(Devirtualization,是一种优化机制,指去掉虚函数分派相关操作)。去虚化现在会考虑匿名命名空间和C++11的final关键字。
    • 新的推测性去虚化遍(使用-fdevirtualize-speculatively控制,这里的“遍”指编译器处理时的Pass)。
    • 对于通过推测做出的直接调用,在代价并不低的地方切换回间接调用。
  • 反馈制导优化的改进:
    • 对使用了C++内联函数的程序的分析更为可靠了。
    • 引入了一个新的函数重排序遍(通过-freorder-functions控制),可以极大减少大型应用的启动时间。

新语言与特定于语言的改进

  • 提供了Go 1.2.1的完整实现。
  • C族语言:

    GCC现在可以生成彩色的诊断信息。可以通过-fdiagnostics-color=auto选项控制在终端中输出彩色信息。下图是一个例子:

    (点击图像放大)

  • C语言相关:

    增加了用于支持ISO C11的_Atomic、_Generic、_Thread_local等特性。

  • C++相关:

    C++前端增加了对C++1y一些新特性的支持,比如普通函数的返回类型推导、数字分隔符、多态Lambda等。

  • 标准库相关:

    最重要的改进是对C++11 <regex>的支持。改进了对即将到来的C++14标准的实验性支持。

对于支持的目标平台,也有很多改进,比如:

  • 在x86-64和ia32平台上,实现了对AVX-512指令集的支持。
  • GCC 4.8引入的局部寄存器分配器(Local Register Allocator,LRA)之前支持的目标平台只有ia32和x86-64,现在在Aarch64、ARM、S/390和ARC平台上已经默认启用,在PowerPC和RX平台上也可以选择启用。

更多细节,可以参考相关页面

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

赞一个 by 张章 鸥翔鱼游

看了此贴菜鸟又涨姿势了

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT