阅读更多

6顶
0踩

编程语言

原创新闻 了解 GCC 4

2008-11-06 15:52 by 副主编 QQbyte 评论(2) 有9906人浏览
八月初 Mark Mitchell 发布了 GCC 4.3.2 版本,GCC是GNU编译集合,包括C, C++, Objective-C, Fortran, Java, and Ada编译器等。从这里下载最新的GCC: http://gcc.gnu.org/mirrors.html



让我们了解一下GCC 4:

在过去的几年中,GNU Compiler Collection (GCC)一直在做GCC 3 到 GCC 4 的主要版本转换。GCC 4是一个重要的版本,GCC 4 新增了很多新的最优化框架(和新的中间代码生成),新的架构和语言支持,多种新属性和选项变化。了解GCC 4新的属性和它们的优点很有必要。

GCC是所有开发的基石,不管是对开源世界和闭源世界。它让操作系统和架构能够运行。当一个新的处理器出现,它必须依赖一个GCC版本支持(GCC在后台为它提供代码生成)。GCC也让开源操作系统Linux得以运行,让Linux进入嵌入开发领域成为现实……

但是GCC并不是静止的,新的处理器架构不停的出现,新的研究发现更好的方式来生成最优化代码,所以GCC也在一直在发展中,并且成功的发布了新的主要版本GCC 4。本文将浏览GCC的核心修改,让你熟悉新的编译标准。

首先简短复习一下的GCC历史:

GCC 最初是GNU C Compiler,由大名鼎鼎的 Richard Stallman 同学 在1987年首次发布。Richard开始这个项目于1984年,期望建立一个免费的C编译器,能够被使用和修改。GCC 最初跑在早期的Sun和DEC VAX系统上。

作为一个开源的编译器(意味着源代码是公开的),其他开发者也在热心帮助修复bug,更重要的是升级GCC支持新的语言和其他目标架构。不久以后,它的名称变成GNU Compiler Collection,它已经支持多种语言和最流行的架构。

GCC发布历史:



今天GCC已经成为最流行的编译器,支持Ada, Fortran, the Java™ language,  C 的变种 (C++ 和 Objective-C),以及覆盖了最大范围的处理器架构(支持30种处理器家族),GCC源代码移植到了超过60种平台,也是目前现存的最复杂的开源系统,GCC现在拥有大概150万行源代码。

在开始之前简单了解GCC的基本架构:

编译器是一种pipeline管道架构,通过不同的层次为不同类型的数据进行通讯(见下图)。前台编译器针对特殊语言,包括特定语言的语法分析器,解析为树状结构和中间状态代码(使用注册转换语言Register Transfer Language:RTL)。后台编译器提供与语言无关的解析和针对特定目标架构的创建结构。为了达到这个目标,最优化使用RTL创建更快速或者更简洁代码(如果可能,两者同时兼顾)。最优化的RTL被代码生成器获取,然后生成目标代码。



GCC 4的核心转换:

GCC 4 提供许多标准编译器组件的修改,最大更改是通过引进树静态单一分配(tree Static Single Assignment:SSA)格式对代码最优化的支持。GCC 4 对于 警告warning和错误error的展示是非常彻底的(事实上,一些特定的警告信息在GCC 4中已经显示为错误)。GCC 4的一个退步是它并不是GCC 3创建对象的字节编译,这意味着GCC 3编译的代码必须通过GCC 4重新编译。不幸的是,这样的成本就要增加。

让我们看看GCC 4 的主要进步。

4.0 发布系列:

4.0系列(4.0.4是最后版本),是GCC 进入 第4版的第一步,所以并不推荐使用在生产环境中,这个版本包含很多修改,一个是前面介绍的树静态单一分配SSA,另外一个是autovectorization自动矢量化。

在GCC 4之前,中间代码名叫Register Transfer Language (RTL),RTL是一个低层的代码,非常类似于汇编语言(从LISP S-expressions获得灵感)。RTL的问题是它对转换成最终目标提供了优化,确失了解释信息。当需要支持更好的分析和优化的时候,Tree SSA 设计用来同时独立于语言和目标。

Tree SSA 引入了两个新的中间代码,第一个叫 GENERIC ,这是一个普通的树结构,用来形成前台树格式。 GENERIC 树转换为 GIMPLE格式和子序列控制流图来支持基于SSA的最优化。最后SSA树转换为RTL,这用于后台来做最终目标的代码生成。简单的说,就是,引入Tree SSA的好处就是提供新的中间代码让高层和低层的最优化都做到最好。

GCC 4另外一个有趣的变化是添加了loop vectorizer 循环矢量(也是基于Tree SSA框架)。Autovectorization 自动矢量化让编译器标识代码内的分级进程循环,让目标处理器能够获得矢量指令的优势。结果是获得更加严格和高效的目标代码。另一个基于循环优化的是Swing Modulo Scheduling (SMS),通过减少构造层平行数量来构建最小循环指令管道。

最后 4.0 系列引入很多C 和 C++ 修改,新的Fortran 前台,支持Fortran 90 和 95 (而不是古老的Fortran 77,GCC 3支持)。新的Ada 2005功能,支持更多Ada新的架构。

4.1发布系列:

改进的属性支持和更精确的分支可能性预判。两个很有用的优化是更好的内联支持和减少本地指令缓存能力。如果函数是内联方式,编译器不再频繁执行。而且热点调用区域将更可能通过内联来保持代码数量尽可能小,获得内联函数的优势。GCC能够帮助分段函数进入热点或者冷静区域。保持热点函数放在一起,获得更好的指令缓存。

前台做了系列更新,包括支持Objective-C++。同时有大量针对java核心库(libgc)的更新。后台引入对IBM® System z™ 9-109 处理器支持,包括支持128位指令代码,Electronics Engineers (IEEE)浮点数,和内建原子内存存取能力。如果这些还不够吸引眼球,那么后台现在还能够发出保护堆栈攻击的指令,这意味着,如果缓冲buffer溢出被检测到,将重新排列保护指针不会崩溃。一些内建功能也被更新,用来保护缓冲buffer不会被过量请求占用。

4.2发布系列:

4.2版本继续支持更好的优化,同时包括语言和处理器架构的进步。后台更新包括对Sun的UltraSPARC T1处理器支持(代码名称Niagara),同时支持Broadcom的SB-1A MIPS 芯片。前台修补了C++可视化处理机制,支持Fortran 2003 输入/输出流扩展。但是4.2最有趣的更新是添加了C,C++和Fortran编译器的OpenMP功能。

OpenMP是一个多线程实现,允许编译器生成平行任务和数据代码。

OpenMP一个概念:代码能够通过区域注释,这块区域平行处理能够被处理器直接使用。代码转换成多线程程序,用来处理代码块存在,然后在代码块结束后进入每个线程。

下图提供了处理器如何工作的示例。



4.3发布系列:

这个发布系列显示功能和支持架构的加速进步 (比如很多陈旧的架构支持被删除)。新的语言支持,比如添加对Fortran 2003支持。新的处理器支持,包括支持Coldfire 处理器家族, IBM System z9 EC/BC 处理器,Cell broadband engine 晶格宽带引擎架构的互协作处理器单元(Synergistic Processor Unit :SPU),支持SmartMIPS等。你将发现Thumb2的编译和库支持(简洁的ARM指令)以及对ARMv7架构支持,支持 Core2 处理器和Geode处理器家族。

4.3 发布以后:

已经开始4.4版本开发了,这个版本即将发布,在4.4版本中OpenMP的3.0版本规格将应用到C, C++, 和 Fortran中。

编译器现在允许你定义一个在函数层进行优化的级别,(代替文档层,原先是缺省设置)。这个功能提供优化参数,提供独立的选项做优化。

最后处理器将添加Picochip支持,这是一个16位多核处理器。

GCC的未来?

GCC的未来是光明的。GCC将支持更多的处理器和架构,GCC几乎涵盖整个开发语言。开发方面还支持一系列不同的语言,比如Mercury,GHDL(一个用于VHDL的GCC前台语言),和 统一的并行C语言(Unified Parallel C language :UPC)。

由于GCC的进步,几乎所有的软件将从GCC的进步中获得好处(从Linux和Berkeley软件到Apache等),通过GCC 4进行软件编译将更加简洁和快速。

来自: ibm.com
6
0
评论 共 2 条 请登录后发表评论
2 楼 pi1ot 2008-11-07 17:29
c++09支持如何
1 楼 fivestarwy 2008-11-07 01:07
希望速度有所提高

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Vite 存在任意文件读取漏洞(CVE-2025-30208)

    Vite 是一个面向现代 Web 开发的轻量级前端构建工具,由 Vue.js 作者尤雨溪团队打造。它基于原生 ES 模块(ESM)提供极速的开发服务器启动和热更新,利用浏览器原生支持的特性实现按需编译,无需打包,显著提升开发效率。生产环境则通过 Rollup 进行高效构建,支持 TypeScript、JSX、CSS 预处理器等主流工具链,同时提供丰富的插件生态。Vite 以"快"为核心,重新定义了前端开发体验,尤其适合单页应用(SPA)、库工具等场景。

  • 如何发现安全漏洞

    如何发现安全漏洞by dspman 如果一个程序有错误,并且只在某些特殊的情况下面出现,它并不是什么大问题。通常,你能够避开这些特殊的情况,使得程序中的错误故障不会发生危害。你甚至可以按照你的意愿,在你的程序中加入这些小小的“臭虫”。但是,有时有些程序处于安全界限的边缘位置。他们从另外的程序作为输入,但不是按照程序本来的存取方法。我们常见的一些例子:你从的邮件阅读器读取任何人给你发的邮件,然后显示

  • 漏洞挖掘入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    希望这篇文章在可以帮助你解开一些对于漏洞挖掘的谜团。在学习和研究漏洞挖掘的过程中遇到困难并感到不知所措是很正常的。不过学习的过程就是这样,只有不断的去尝试才会进步。祝你在漏洞挖掘的路上走的越来越远。

  • CVE-2025-30208(文件读取)漏洞复现

    漏洞源于Vite在处理URL查询参数时的逻辑缺陷。当请求路径包含特定参数(**如?import&raw?**)时,Vite对URL尾部分隔符(如?和&)的正则匹配不严格,导致安全检查被绕过。中存在的一个高危逻辑漏洞,允许攻击者通过构造特殊的URL绕过文件访问限制,读取服务器上的任意文件(如配置文件、密钥、数据库凭据等)。CVE-2025-30208是。2.在fofa搜索,寻找存在漏洞ip。3.尝试传参,得到相关信息。

  • 如何寻找安全漏洞之——黑客们如何挖掘漏洞

    看到本文的题目你会不会虎躯一震呢?感觉——it’s imposible!,but it is so easy to get in。。。 以前我们总是听到“挖掘漏洞”,“某某公司出现了提权漏洞”,我们会问一句“你咋知道这是漏洞?你怎么知道漏洞在哪?”,当然回答这个很简单啦,因为漏洞在代码中,但是上百万行的代码谁知道哪里有漏洞?这个嘛。。。人做不到软件可以搞定一切啊!当然漏洞挖掘的前提是你要懂得如何发

  • 教你怎么看一个网站是否存在漏洞!

    教你怎么看一个网站是否存在漏洞! 该隐藏帖已经发布超过30天,因此无需回复即可浏览!        教你怎么看一个网站是否存在漏洞!!!  漏洞  近来很多网站受到了各种各样形式的攻击,黑客攻击的动机各不一样,黑客人攻击的目标也有不确定性,作为一家企业的网管、或CEO您是否担心您的网站也遭受同样的命运呢?      什么样的站点容易被黑客入侵呢?      有人说,我做

  • 简单查找漏洞

    1.http://120.24.86.145:8002/yanzhengma/ 随机数生成查找flag: 输入框内只允许输入1位数字,查看源代码,发现:,则在浏览器F12打开开发者模式,在查看器中修改“maxlength"的值,改为3,回车后输入验证码答案 , flag就出现了       2.http://120.24.86.145:9001/test/ 点击一百万次查找f...

  • Web服务器常见8种安全漏洞

    物理路径泄露    物理路径泄露一般是由于Web服务器处理用户请求出错导致的,如通过提交一个超长的请求,或者是某个精心构造的特殊请求,或是请求一个Web服务器上不存在的文件。这些请求都有一个共同特点,那就是被请求的文件肯定属于CGI脚本,而不是静态HTML页  面。  目录遍历    目录遍历对于Web服务器来说并不多见,通过对任意目录附加“../”,或者是在有特殊意义的目录附加“../”,或者是...

  • 防火墙漏洞

    2016年至今,网络设备的安全问题一直是一个相当热门的话题,特别是8月影子经纪人的黑客入侵方程式组织获取到的攻击工具,网络设备的安全就像黑夜中的曙光,慢慢吸引我们的注意。接下来我们就来了解下近年来热门的网络设备漏洞:Fortigate 2016 年 1 月 12 日,国外安全研究员esizkur爆料 FortiGate 防火墙存在一个后门,攻击者可以通过这个后门直接获取防火墙控制权限。影响范围:F

  • 如何寻找WEB程序漏洞及如何利用和防范

    作者:小华 QQ:56111981 www.hackbase.com转自作者blog:http://xiaohuar.blogchina.com 文章本打算发到杂志,因为我懒得写了,写了一遍就发到自己的BLOG上了。网络安全是一个非常流行的话题,不论是这方面的专家还是一个普通人,都或多或少涉及其中。在此环境下,入侵也变得前所未有的活跃。每个人都想成为这领域的高手。入侵分几个

  • Linux 7通过防火墙安全策略修补安全漏洞

    Linux 安全漏洞修复 iptables 配置安全策略 MySQL数据库漏洞 iptables规则配置说明 安全漏洞修补过程中的问题 iptables配置重启后不生效,规则丢失

  • 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全

    软件安全漏洞测试报告 现在,我们生活中最重要的方面,包括财务,身份和医疗保健,都取决于代码。 现在,软件安全不仅对于公司而且对于个人而言都是至关重要的方面。 任何使用现代软件产品和服务的人都希望了解基本的软件安全性概念,以保持生活的幸福。 对于致力于设计,创建或维护这些产品和服务的任何开发人员,必须全面了解安全漏洞和安全最佳做法,以避免可能导致安全损失甚至数百人,数千人甚至数百万人死亡的安全...

  • 黑客如何查找网络安全漏洞

      电脑黑客们总是希望知道尽可能多的信息,比如:是否联网、内部网络的架构以及安全防范措施的状态。一旦那些有经验的黑客盯上了你的网络系统,他们首先会对你的系统进行分析。这就是为什么我们说运用黑客的“游戏规则”是对付黑客的最好办法的原因。以黑客的眼光来审视网络安全性,往往可以发现很多潜在的安全漏洞。这样做不仅提供了审视你网络系统的不同视角,而且让你能够从你的敌人,即黑客的角度来指导你采取最有效的网络安...

  • 如何入门漏洞挖掘,以及提高自己的挖掘能力

    0x01:前言       大家好我是米斯特团队的一员,我的id香瓜,我们团队在这次i春秋第二次漏洞挖掘大赛中,包揽了前五名,我key表哥一不小心拿了一个第一,导致很多人来加他好友问他,如何修炼漏洞挖掘能力,我今天帮大家解答一下这个疑问,哈哈哈。       漏洞挖掘是安全圈的一个核心之一,但是随着各大厂商安全意识的增强,以及各类waf的出现。一些像sql注入,文件上传,命令执行这些漏洞也不是那...

  • 【精选】小白是如何挖漏洞的(技巧篇)

    更多渗透技能 ,10余本电子书及渗透工具包,搜公众号:白帽子左一 作者:掌控安全-山屿云 目录: 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例,简直不要太nice! 这个月的SRC活动也快开始了,看到群里的小伙伴在问如何找漏洞,SQL注入的漏洞咋找,逻辑漏洞咋找,支付漏洞咋找,越权漏洞咋找,等等 其实这都一个道理,用谷歌语法,找通杀用fofa,这里演示几个类型的漏洞,其它的也是一个道理 第一个:SQL注入漏洞 AS:首先是SQL注入的,这个

  • 最新!!! CVE-2025-30208-Vite 安全漏洞

    本工具用于检测目标系统是否存在 CVE-2025-30208 漏洞。该漏洞允许攻击者通过特定路径读取服务器上的敏感文件(如 /etc/passwd 或 C:\windows\win.ini)。工具支持单个 URL 检测和批量检测,并可选使用 HTTP/HTTPS 代理。这里介一下payload?raw??和?import?raw??的关系。第一个payload适用于读取不带后缀的文件,第二个随意了。

  • Vite开发服务器漏洞预警!启动即裸奔,低门槛攻击可致系统数据泄露

    近日,Vite 官方披露了一个中高风险安全漏洞,分配编号为CVE-2025-30208,攻击者可利用该漏洞绕过开发服务器的保护机制,非法访问项目根目录外的敏感文件。Vite团队反应迅速,立即在2025年3月24日发布补丁,Goby安全团队收到该情报后立即响应测试。

Global site tag (gtag.js) - Google Analytics