教育房产时事环球科技商业
投稿投诉
商业财经
热点动态
科技数码
软件应用
国际环球
晨报科学
新闻时事
信息智能
汽车房产
办公手机
教育体育
生活生物

c编译器哪个好(微软编译优化)

  编译器一般构成
  传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。GCC
  GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 快速演进,变得可处理 C  、Fortran、Pascal、Objective-C、Java, 以及 Ada 等他语言。LLVM
  LLVM (Low Level Virtual Machine,底层虚拟机) 提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种编译器的后台来使用。
  苹果公司一直使用 GCC 作为官方的编译器。GCC 作为一款开源的编译器,一直做得不错,但 Apple 对编译工具会提出更高的要求。原因主要有以下两点:
  其一,是 Apple 对 Objective-C 语言(包括后来对C语言)新增很多特性,但 GCC 开发者并不买Apple的账——不给实现,因此索性后来两者分成两条分支分别开发,这也造成 Apple 的编译器版本远落后于 GCC 的官方版本。其二,GCC 的代码耦合度太高,很难独立,而且越是后期的版本,代码质量越差,但 Apple 想做的很多功能(比如更好的 IDE 支持),需要模块化的方式来调用 GCC,但 GCC一直不给做。编译器大神 Chris Lattner 横空出世
  2000年,本科毕业的 Chris Lattner 像中国多数大学生一样,按部就班地考了GRE,最终前往UIUC(伊利诺伊大学厄巴纳香槟分校),开始了艰苦读计算机硕士和博士的生涯。在这阶段,他不仅周游美国各大景点,更是翻烂了《Compilers: Principles, Techniques, and Tools》,成了GPA满分(4.0) 牛人,并不断地研究探索关于编译器的未知领域,发表了一篇又一篇的论文,。他在硕士毕业论文里提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,直接奠定了LLVM 的基础。LLVM 在他念博士时更加成熟,使用GCC 作为前端来对用户程序进行语义分析产生IF(Intermidiate Format),然后 LLVM 使用分析结果完成代码优化和生成。这项研究让他在2005年毕业时就成为了业界小有名气的编译器专家,他也因此早早地被Apple 盯上,最终成为其编译器项目的骨干。
  刚进入 Apple,Chris Lattner 就大展身手:首先在 OpenGL 小组做代码优化,把 LLVM运行时的编译架在 OpenGL 栈上,这样OpenGL 栈能够产出更高效率的图形代码。如果显卡足够高级,这些代码会直接扔入GPU 执行。但对于一些不支持全部OpenGL特性的显卡(比如当时的Intel GMA卡),LLVM 则能够把这些指令优化成高效的 CPU指令,使程序依然能够正常运行。这个强大的 OpenGL 实现被用在了后来发布的Mac OS X 10.5上。同时,LLVM的链接优化被直接加入到 Apple 的代码链接器上,而 LLVM-GCC也被同步到使用 GCC4.0 代码。LLVM2.0 - Clang
  Apple 吸收Chris Lattner的目的要比改进GCC代码更具野心 -- Apple 打算从零开始写 C、C  、Objective-C语言的前端 Clang,完全替代掉GCC。
  Clang 是LLVM的前端,可以用来编译C,C  ,ObjectiveC等语言。Clang则是以LLVM为后端的一款高效易用,并且与IDE 结合很好的编译前端。
  Clang 只支持C,C  和Objective-C三种语言。2007年开始开发,C编译器最早完成,而由于Objective-C 只是C语言的一个简单扩展,相对简单,很多情况下甚至可以等价地改写为C语言对Objective-C运行库的函数调用,因此在2009年时,已经完全可以用于生产环境。C   在后来也得到了支持。GCC 和 Clang 对比Clang特性
  速度快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 比 GCC 快2倍多。
  内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10 倍。
  诊断信息可读性强:其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
  兼容性好:Clang 从一开始就被设计为一个API,允许它被源代码分析工具和 IDE 集成。GCC 被构建成一个单一的静态编译器,这使得它非常难以被作为 API 并集成到其他工具中。
  Clang有静态分析,GCC没有。
  Clang使用BSD许可证,GCC使用GPL许可证。GCC 优势
  支持 JAVA/ADA/FORTRAN
  GCC 支持更多平台
  GCC 更流行,广泛使用,支持完备
  GCC 基于 C,不需要 C   编译器即可编译GCC、LLVM 和 Clang 如何选择?
  目前不推荐使用老的GCC4.2,因为苹果不会维持它了,而且LLVM-GCC看起来会更好。在项目中途改编译选项可是一个大变动,需要慎重。
  对新的项目而言,LLVM-GCC 看起來应该是个安全的选择,苹果公司认为它够稳定够成熟,所以才把它当做Xcode 4的预设选项。而且,既然选项使用的是GCC parser,向后兼容性应该没问题。
  LLVM-GCC是个安全的选项,但并不是指Clang/LLVM比较不安全,只是成熟度还沒那么高效了。总结 - 再探LLVM
  回顾GCC的历史,虽然它取得了巨大的成功,但开发GCC的初衷是提供一款免费的开源编译器,仅此而已。可后来随着GCC支持了越来越多的语言,GCC架构的问题也逐渐暴露出来。但GCC到底有什么问题呢?LLVM的优点也正是GCC的缺点。传统编译器工作的时候前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(Abstract Syntax Tree)。优化器对这一中间代码进行优化,试图使代码更高效。后端则负责将优化器优化后的中间代码转换为目标机器的代码,这一过程后端会最大化的利用目标机器的特殊指令,以提高代码的性能。事实上,不光静态语言如此,动态语言也符合上面这个模型,例如Java。JVM也利用上面这个模型,将Java代码翻译为Java bytecode。这一模型的好处是,当我们要支持多种语言时,只需要添加多个前端就可以了。当需要支持多种目标机器时,只需要添加多个后端就可以了。对于中间的优化器,我们可以使用通用的中间代码。这种三段式的结构还有一个好处,开发前端的人只需要知道如何将源代码转换为优化器能够理解的中间代码就可以了,他不需要知道优化器的工作原理,也不需要了解目标机器的知识。这大大降低了编译器的开发难度,使更多的开发人员可以参与进来。虽然这种三段式的编译器有很多优点,并且被写到了教科书上,但是在实际中这一结构却从来没有被完美实现过。做的比较好的应该属Java和.NET虚拟机。虚拟机可以将目标语言翻译为bytecode,所以理论上讲我们可以将任何语言翻译为bytecode,然后输入虚拟机中运行。但是这一动态语言的模型并不太适合C语言,所以硬将C语言翻译为bytecode并实现垃圾回收机制的效率是非常低的。GCC也将三段式做的比较好,并且实现了很多前端,支持了很多语言。但是上述这些编译器的致命缺陷是,他们是一个完整的可执行文件,没有给其它语言的开发者提供代码重用的接口。即使GCC是开源的,但是源代码重用的难度也比较大。
  LLVM最初的定位是比较底层的虚拟机。它的出现正是为了解决编译器代码重用的问题,LLVM一上来就站在比较高的角度,制定了LLVM IR这一中间代码表示语言。LLVM IR充分考虑了各种应用场景,例如在IDE中调用LLVM进行实时的代码语法检查,对静态语言、动态语言的编译、优化等。从上面这个图中我们发现LLVM与GCC在三段式架构上并没有本质区别。LLVM与其它编译器最大的差别是,它不仅仅是Compiler Collection,也是Libraries Collection。举个例子,假如说我要写一个X语言的优化器,我自己实现了PassX算法,用以处理X语言与其它语言差别最大的地方。而LLVM优化器提供的PassA和PassB算法则提供了X语言与其它语言共性的优化算法。那么我可以选择X优化器在链接的时候把LLVM提供的算法链接进来。LLVM不仅仅是编译器,也是一个SDK。Apple LLVM compiler 4.2是一个真正的LLVM编译器,前端使用的是Clang,基于最新的LLVM 3.2编译的。LLVM GCC 4.2编译器的核心仍然是LLVM,但是前端使用的是GCC 4.2编译器。从LLVM的下载页面可以看出,LLVM从1.0到2.5使用的都是GCC作为前端,直到2.6开始才提供了Clang前端。
  如果你下载 LLVM 的代码,那么它就是一个IR到ARM/机器码的编译器。比如bin/opt就是对IR的优化器,bin/llc就是IR-

洗澡为什么不能先洗头(可以一边洗澡一边洗头吗)洗澡有益于身心健康,它不但可以清理干净身上的皮脂灰尘汗液和细菌,还可以促进血液循环,消除疲劳,提高睡眠质量。但是,如果不注意,洗澡不仅不能有益健康,还会损害身体,甚至危及生命。今天一边是友情一边是爱情是什么歌(关于伴侣的歌曲)周杰伦简单爱。mp3051来自你如梦愿梦不醒audio1开不了口周杰伦qq音乐地址httpsy。qq。comportalplayer。html周杰伦至今的巡回演唱会共有Fantas鼻头太大怎么变小窍门(15岁鼻孔大怎么缩小自然方法)小巧精致的鼻子,自然是给我们的颜值加分的。但如果觉得自己的鼻子比较大,那么怎样才能更好的消除鼻子呢?想要瘦鼻子的话,有没有什么有效的方法呢?今天小疯来给大家分享几个小知识,试试这样查微信聊天记录和窃听通话(怎么调出微信聊天记录)查微信聊天记录和窃听通话(怎么调出微信聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有时查老婆微信通话记录(如何查老婆的微信聊天记录)查老婆微信通话记录(如何查老婆的微信聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有时分在移动营业厅能查老婆的手机通话记录吗(如何查老婆的微信聊天记录)在移动营业厅能查老婆的手机通话记录吗(如何查老婆的微信聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出如何监控对方的手机位置(如何定位他人手机位置)如何监控对方的手机位置(如何定位他人手机位置)在日常生活中,由于手机的功能越来越强大,所以大部分人手上都会有智能手机。那么你用了这么久的手机,你知道手机上面隐藏的定位功能吗?你知道如何监控对方微信聊天记录(监视他人手机微信聊天记录不被知道)如何监控对方微信聊天记录不被知道(监视他人手机微信聊天记录)夫妻之间失去信任会引起怀疑。如何监控彼此的微信聊天记录是很多人对自己的感受缺乏信心的结果,但查看聊天记录只能在分析后才能互联网项目计划书范本(大学生创新创业项目申报书)本人从大学开始参加挑战杯等创新创业大赛,在大三作为队长获得了挑战杯省级银奖,由于队伍没有推荐国家级参赛,推荐了室友和队员参与到国家级参赛队伍(本人另有学习规划,没再参与),他们队伍90后创业经验分享(年轻人创业)这是小人物大职场的第117期人物一个筹集100万在北京开旅游定制公司却倒赔20万,在公司濒临倒闭时又拉来500万投资的90后女创业者年龄28职业定制旅行公司老板坐标上海月入现公司营这些创业故事案例(创业者的创业故事)2021加油带头人大家都知道创业是非常艰苦的,很多年轻人都想着创业,想着有自己的一份事业,但是在创业过程中往往能坚持下来的都成了名人。下面为大家整理了十大名人艰辛的创业故事。1阿里
男朋友要查我通话记录(怎么查男朋友手机通话记录清单)男朋友要查我通话记录(怎么查男朋友手机通话记录清单)当今时代网络发展的速度太快,一方面给人们生活带来便利,另一方面也加深了人们的恐惧感。最明显的就是随着手机的普遍使用,人们的不安也男朋友要查我通话记录(怎么查男朋友手机通话记录清单)男朋友要查我通话记录(怎么查男朋友手机通话记录清单)对于手机通话记录的查询,我们可以直接通过网上营业厅来实现。如图所示,通过百度搜索进入网上营业厅。待进入如图所示的网上营业厅界面后男朋友要查我通话记录(怎么查男朋友手机通话记录清单)男朋友要查我通话记录(怎么查男朋友手机通话记录清单)1,可以查询自手机出厂以来所有通话记录,而去营业厅查询的话只可以查询最近6个月的。2,不需要知道服务密码。3,可对手机上不小心删被男朋友查手机(查男人手机要查哪几点)被男朋友查手机(查男人手机要查哪几点)感情总是复杂?为你排忧解难,欢迎观看哦!我们经常说,婚姻生活中最需要的就是信任,只有信任对方,两个人的生活,才能和睦相处,说不上去相敬如宾,但查男朋友手机聊天记录查哪几个关键词(怎么知道男朋友微信聊天记录)查男朋友手机聊天记录查哪几个关键词(怎么知道男朋友微信聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出女朋友要查手机定位手机(手机电话怎么查定位)女朋友要查手机定位手机(手机电话怎么查定位)现在的社会,手机现已成为了万众随身的一种设备,它能够上网和联络朋友,能够作为人们的掌上电脑。现在的手机大多数都是智能化的,能够和电脑比美电视剧为什么要配音(电视剧配音完成就播出吗)随着影视产业的快速发展,一些影视剧的拍摄也在逐渐突破,力求取得突出成就,有时候为了拍摄进度,往往对声音等方面会有所忽略。因为大部分电视剧的拍摄现场都是比较嘈杂的,也会出现各种突发状今日废红铜价多少钱,铜多少钱一斤2020报价目前长江铜业网。年03月06日锌锭价格多少钱一吨。覆铜板价格相关的行情报价价格分析。包含最新的今日废铜价回收今日价格今日废铜价回收行情走势今日废铜价回收最新报价行业分析等信息。今日海米是什么(海米是什么做的)海米一般叫做虾米或虾仁,是由白虾红虾青虾加盐水晒干而来,因如舂谷成米,故称海米。那么海米多少钱一斤?海米和虾皮的区别是什么?一起来了解下。海米多少钱一斤?海米价格受产地品质等影响,阿拉善属于哪个省份(阿拉善沙漠在哪个省份)摄影晓涵我的故乡不能仅仅是荒芜,现在已经是绿树成荫,如诗如画。盛夏时节,孟和巴依尔谈起家乡内蒙古自治区阿拉善盟的变化时激动地说。阿拉善盟曾经是内蒙古自治区沙漠最多土地沙化最严重的地怎么煮小米粥(煮小米饭的步骤)大家好,这里是刘一手美食,老刘,每天分享一道好吃又实用的家常菜1小米粥是以小米作为主要食材熬制而成的一种独具特色的北方粥点,口味清淡,清香味,具有简单易制,健胃消食的特点2今天刘嫂