---------------------------------------------------
目录、摘要
---------------------------------------------------
计算机语言分类
编译技术简介
开源编译器
编译优化简介
计算机语言分类
根据语言的代分类
机器语言(1111 1111 1101 1000 1111 1111 1110 0000 0000 0000…….)
汇编语言(ADD AX, BX)
高级程序设计语言(Fortran Cobol Lisp C C++ C# Java)
面向特定应用语言(NOMAD SQL Postscript)
基于逻辑和约束的语言(Prolog OPS5)
根据任务的完成方式分类
强制式语言(C C++ C# Java)
声明式语言(ML Haskell)
根据语言的特征分类
冯·诺依曼语言(Fortran C)
面向对象语言(C++ C# Java Ruby)
脚本语言(Awk JavaScript Perl PHP Python Ruby Tel)
用各种语言罚写500遍
用各种语言罚写500遍
用各种语言罚写500遍
编译技术简介
编译技术简介
开源编译器
Tiny C Compiler:Tiny C Compiler 是一个微型的 C 语言编译器,支持 Windows 和 Linux 平台。
LLVM:LLVM从本质上来说,它不是一个编译器.它是一个编译器的架构.通俗的来说,它实现了一个库,在这个库上,可以
很容易的实现不同的编译相关的程序,当然,编译器自然是其中最重要的一个. 当然其他像编译时间的代码分析也是很
容易实现的。 LLVM定义了一个虚拟机的语言。然后再这个语言的基础上,实现了很多的功能,例如大多数的优化都是
基于这个虚拟机的语言来进行的。
Pcc:Pcc 是一个可移植的 C 编译器
MinGw:MinGw (Minimalist GNU for Windows)是一套以 Gnu gcc/egcs 计划为基础的编译器,其可编译出在 Win32
系统上执行的 ojbect code。 “Mingw32” 是取 Minimalist Gnu-Win32 计划之意,其目标为提供一个可在 Win32
平台上,开发 Win32 native code 的编译器,而非提供 unix 程式移植到 Win32 平台之用,此即为其 minimalist
之意。 Mingw32 使用 Microsoft runtime libraries ,因此由其产生之程式,执行时不需先行安装。
GNU Pascal:GNU Pascal 是一个免费开源的 Pascal 编译器。
Parrot:Parrot 应动态类型语言(如Perl和Python)的明确需求而设计,并要求这些语言写的程序比用静态语言开发
的虚拟机(JVM,.NET)能更高效地运行。Parrot也被设计成在编译到它上面的语言之间提供互操作性。理论上,你可
以 Perl写一个类,用Python写一个子类,然后在Tcl程序里面实例化并使用那个子类。在历史上,Parrot始于Perl6的
运行时间。和Perl5不同,Perl6的编译器和运行时间(VM)要更加清晰地分开。
FlASM:FLASM,名字是由FLASH和ASM而来,用汇编语言来写ACTION SCRIPT,FLASM能帮你将SWF里面的AS转换成汇编语
言,然后你要做的是优化这些代码,最后交由FLASM再把他转回SWF,FLASM的语法与汇编类似
Ja.Net:Ja.NET 可视为Java之上的.NET Remoting(Microsoft .NET Framework内的主要组件)的堆栈实作,而在Java
平台上提供Ja.NET的执行时期模块(Run time),可支持TCP/IP、HTTP等沟通管道,也可同时支持SOAP或是二进制互通
协议以提升沟通效率。透过此执行时期模块,.NET与Java /J2EE的数据类型不仅可以对应,还能进行双向的沟通。
Ja.Net的编译器基于Eclipse JDT,Eclipse JDT能够修改生成IL,也能生成Java字节码。
FreeBasic:FreeBasic 是一个免费开源的Basic语言编译器。
Free pascal:Free Pascal (aka FPK Pascal) 是一个支持32/64位系统的专业Pascal编译器。支持包括如下处理器:
Intel x86, Amd64/x86_64, PowerPC, PowerPC64, Sparc, ARM. 支持的操作系统包括:Linux, FreeBSD, Mac OS
X/Darwin, Mac OS classic, DOS, Win32, Win64, WinCE, OS/2, Netware (libc and classic) 以及MorphOS....
开源编译器
Shed Skin:Shed Skin 是一个用来将 Python 程序 转成 C++ 程序的编译工具。
MTASC:MTASC 是第一个开源的 ActionScript 编译器。
Flat Assembler:Flat Assembler 是一个快速高效的80x86的汇编工具,支持DOS、Windows、Linux操作系统,支持包
括 8086-80486/Pentium instructions with MMX, SSE, SSE2, SSE3, and 3DNow! extensions and x86-64 (both
AMD64 and EM64T) 指令集。
Jadu:内容管理公司 Jadu 最近发布了一个工具,可以让 PHP 和 .NET 这对冤家和平共处。他们开发了一个叫做
Phalanger PHP compiler 的工具,可以将 PHP 程序编译成本地 .NET 程序执行。他们还准备将这一工具开源。据
Jadu CEO Suraj Kika 介绍,这个工具对 PHP 程序进行编译,编译成 .NET 框架下下的本地程序。比如,你想用
WordPress,但你属于微软阵营,你可以将 WordPress 编译成可执行文件,放到 .NET 中并在 Visual Studio 中
针...
Great Cow BASIC:Great Cow BASIC是一个PIC 10/12/16/18微处理区系列的BASIC编译器。三个主要目标:删除重复
需要装配的指令,生产高效率的代码,并可以很容易移植到另一个微处理。功能和特点标准的基本流量控制报表支持
乘,除,添加,减,布尔运算和比较位,字节, Word和字符串数据类型,除了字节数组子程序和函数内置汇编,在大
多数情况下,没有任何特别说明数据表支持大多数的8位PIC微控制器等待命令,从而使相同长度拖延不管的时钟速度
标准...
BSDBuild:BSDBuild is a portable, self-contained build system with support for concurrent building,
configure script generation, and IDE "project file" generation. It is derived from the original 4.4BSD
build system, but it offers a degree of portability comparable to autotools....
GCC for SPARC:这是专为 Sun 的 SPARC 系统优化的 GCC 编译器。
TinyCOBOL:TinyCOBOL 是一个免费的COBOL 编译器 ,支持Linux系统。
Parity:Parity 可以用来将 Unix 环境下的项目编译成 Windows 下的可执行程序或者是动态库。
开源编译器
GCC
开源编译器
LLVM
编译优化简介
编译质量衡量标准
代码体积
资源占用
代码运行效率
代码通用性
选择更优秀的编译器
选择更适合的编译选项
GCC可选优化编译选项
分支预测优化:
-fbranch-probabilities 在使用“-fprofile-arcs”选项编译程序并执行它来创建包含每个代码块执行次数的文件之
后,程序可以利用这一选项再次编译,文件中所产生的信息将被用来优化那些经常发生的分支代码。如果没有这些信
息,gcc将猜测那一分支可能经常发生并进行优化。这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀
的文件中。
-fprofile-arcs 在使用这一选项编译程序并运行它以创建包含每个代码块的执行次数的文件后,程序可以再次使用“
-fbranch-probabilities”编译,文件中的信息可以用来优化那些经常选取的分支。如果没有这些信息,gcc将猜测哪
个分支将被经常运行以进行优化。这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀的文件中。
循环展开优化
-fmove-all-movables 将所有不变的表达式移动到循环体之外,这种做法的好坏取决于源代码中的循环结构。
-funroll-loops 如果在编译时可以确定迭代的次数非常少而且循环中的指令也非常少,可以使用该选项进行循环展开
,以驱除循环和复制指令。
寄存器优化
-fforce-addr 必须将地址复制到寄存器中才能对他们进行运算。由于所需地址通常在前面已经加载到寄存器中了,所
以这个选项可以改进代码。
GCC可选优化编译选项
面向目标机器的硬件优化
大多数程序和库在编译时默认的优化级别是“2”(使用gcc选项:“-O2”)并且在Intel/AMD平台上默认按照i386处理器
来编译。如果你只想让编译出来的程序运行在特定的平台上,就需要执行更高级的编译器优化选项,以产生只能运行
于特定平台的代码。
一种方法是修改每个源码包中的Makefile文件,在其中寻找CFLAGS和CXXFLAGS变量(C和C++编译器的编译选项)并修改
它的值。一些源码包比如binutils, gcc, glibc等等,在每个子文件夹中都有Makefile文件,这样修改起来就太累了
!
GCC可选优化编译选项
面向目标机器的硬件优化
"-march"选项表示为特定的cpu类型编译二进制代码(不能在更低级别的cpu上运行)
GCC可选优化编译选项
面向目标机器的硬件优化
GCC可选优化编译选项
全局优化
GCC可选优化编译选项
其他
-malign-double 将double, long double, long long对齐于双字节边界上;有助于生成更高速的代码,但是程序的尺
寸会变大。
-maccumulate-outgoing-args 指定在函数引导段中计算输出参数所需最大空间,这在大部分现代cpu中是较快的方法
;缺点是会增加代码尺寸。
-fprefetch-loop-arrays 生成数组预读取指令,对于使用巨大数组的程序可以加快代码执行速度,适合数据库相关的
大型软件等。
-fstack-check 为防止程序栈溢出而进行必要的检测,在多线程环境中运行时才可能需要它。
配图原文地址:http://user.qzone.qq.com/1780551083/blog/1323156049
本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:[email protected])