导航:首页 > 源码编译 > 为什么新电脑编译代码速度快

为什么新电脑编译代码速度快

发布时间:2022-09-04 09:13:17

A. 请教,为何C程序的编译速度要比C++程序快

编译器好比一个应用程序,诸多的编译器直接自然会有速度上的差异,根据编译器功能的大小而定,一般,越大的编译器,功能越多,编译器源代码来越慢,功能简单的编译器,编译器源代码来,速度就快得多。

B. 为什么Delphi的编译速度如此之快

因为你的工程太小。找个巨大的工程试试
delphi的快也是老黄历了,说它快可能是指很久以前在其它条件基本相同的情况下,代码生成速度相对于其它编译器快一些。编译的快慢跟很多因素相关,比如工程的大小,是否采用了预编译,优化的层次深度,优化选项的选择等。

C. 为什么编译执行比解释执行更有效率

编译执行是再编译之前先做解释,然后存储为机器代码.而解释执行是一边解释语句,再编译成机器代码执行.
你想想再相同的时间内哪个执行的快嘛^

D. 为什么C语言编写的系统程序执行速度比用其他语言编写的快

C语言是高级语言,编译后生成可执行程序。
它的执行速度一般来说,比要通过解释执行的语言快。但比汇编语言慢。

不一定比其它高级语言快,例如,数学运算方面,可能不如fortran快,当然,假定两者用的算法完全一样。

如果算法不同,两种语言就不好比较了。例如,对整篇输入文章进行语句结构或词组结构替代,用Perl 脚本比C快。

计算机语言其实是人的工具,例如,菜刀,斧头,螺丝刀,各有所长,各有各的用途。菜刀切菜,斧头劈柴,换过来用也不是不是可以,斧头切菜,菜刀劈柴,效率差。

C语言同C语言比,速度也不一样。MS VC++ 同 TB不一样.
同一种C语言,编译时用了优化1,优化2,执行程序快慢不同。

E. 为什么汇编语言编出来的程序要比高级语言编出来的执行效率高

这个没有一定的说法,取决于编译器的聪明程度。
一般的语言,如C语言是首先将C语言编译为汇编,然后汇编转为机器码。而用汇编的写则是直接由汇编到机器码。那么这两者的速度差异取决于编译器在编译的时候产生的汇编码是否比程序员手写的更为高效和快速了。
早期的时候编译器很差,产生的汇编码没有程序员手工写的高效,而现在编译器大大的聪明了,所以这两者的速度是很难讲的。
不过大部分情况下,编译器翻译的都要差,所以速度没有手工写的汇编码快。加上java、c#语言等先要转成一个中间语言,再翻译成汇编码,这个就更差了。

F. 程序的编译速度与程序的执行速度

执行与编译。。也有挂钩!。。执行、编译速度又跟硬件有关!用 WEB来说 第一次编译比较慢!后面这次访问就快多了!这跟缓存有关。。还有就是代码的问题。。 多次的循环判断也会造成系统执行变慢!。。在提升速度方面 主要就是俩种方法 1.完善的代码 2.提高硬件了!可能我说的比较片面!别的兄弟可以继续补充!

G. 浅谈怎样加快C++代码的编译速度

首先一点 加快编译速度意义不大。
需要整个项目重新编译的情况并不多,而每次只修改若干文件的情况下,加快速度也不会有太大影响。
更重要的应该把目光放在加快运行速度上。
要加快编译速度,可以从这几个方面尝试。

一、代码角度
1、在头文件中使用前置声明,而不是直接包含头文件。
不要以为你只是多加了一个头文件,由于头文件的"被包含"特性,这种效果可能会被无限放大。所以,要尽一切可能使头文件精简。很多时候前置申明某个namespace中的类会比较痛苦,而直接include会方便很多,千万要抵制住这种诱惑;类的成员,函数参数等也尽量用引用,指针,为前置声明创造条件。
2、使用Pimpl模式
Pimpl全称为Private Implementation。传统的C++的类的接口与实现是混淆在一起的,而Pimpl这种做法使得类的接口与实现得以完全分离。如此,只要类的公共接口保持不变,对类实现的修改始终只需编译该cpp;同时,该类提供给外界的头文件也会精简许多。
3、高度模块化
模块化就是低耦合,就是尽可能的减少相互依赖。这里其实有两个层面的意思。一是文件与文件之间,一个头文件的变化,尽量不要引起其他文件的重新编译;二是工程与工程之间,对一个工程的修改,尽量不要引起太多其他工程的编译。这就要求头文件,或者工程的内容一定要单一,不要什么东西都往里面塞,从而引起不必要的依赖。这也可以说是内聚性吧。
以头文件为例,不要把两个不相关的类,或者没什么联系的宏定义放到一个头文件里。内容要尽量单一,从而不会使包含他们的文件包含了不需要的内容。记得我们曾经做过这么一个事,把代码中最"hot"的那些头文件找出来,然后分成多个独立的小文件,效果相当可观。
其实我们去年做过的refactoring,把众多DLL分离成UI与Core两个部分,也是有着相同的效果的 - 提高开发效率。
4、删除冗余的头文件
一些代码经过上十年的开发与维护,经手的人无数,很有可能出现包含了没用的头文件,或重复包含的现象,去掉这些冗余的include是相当必要的。当然,这主要是针对cpp的,因为对于一个头文件,其中的某个include是否冗余很难界定,得看是否在最终的编译单元中用到了,而这样又可能出现在一个编译单元用到了,而在另外一个编译单元中没用到的情况。
之前曾写过一个Perl脚本用来自动去除这些冗余的头文件,在某个工程中竟然去掉多达了5000多个的include。
5、特别注意inline和template
这是C++中两种比较"先进"的机制,但是它们却又强制我们在头文件中包含实现,这对增加头文件的内容,从而减慢编译速度有着很大的贡献。使用之前,权衡一下。
二、综合技巧
1、预编译头文件(PCH)
把一些常用但不常改动的头文件放在预编译头文件中。这样,至少在单个工程中你不需要在每个编译单元里一遍又一遍的load与解析同一个头文件了。
2、Unity Build
Unity Build做法很简单,把所有的cpp包含到一个cpp中(all.cpp) ,然后只编译all.cpp。这样我们就只有一个编译单元,这意味着不需要重复load与解析同一个头文件了,同时因为只产生一个obj文件,在链接的时候也不需要那么密集的磁盘操作了,估计能有10x的提高,看看这个视频感受一下其做法与速度吧。
3、ccache
compiler cache, 通过cache上一次编译的结果,使rebuild在保持结果相同的情况下,极大的提高速度。我们知道如果是build,系统会对比源代码与目标代码的时间来决定是否要重新编译某个文件,这个方法其实并不完全可靠(比如从svn上拿了上个版本的代码),而ccache判断的原则则是文件的内容,相对来讲要可靠的多。
很可惜的是,Visual Studio现在还不支持这个功能 - 其实完全可以加一个新的命令,比如cache build,介于build与rebuild之间,这样,rebuild就可以基本不用了。
4、不要有太多的Additional Include Directories
编译器定位你include的头文件,是根据你提供的include directories进行搜索的。可以想象,如果你提供了100个包含目录,而某个头文件是在第100个目录下,定位它的过程是非常痛苦的。组织好你的包含目录,并尽量保持简洁。
三、编译资源
要提高速度,要么减少任务,要么加派人手,前面两个方面讲得都是减少任务,而事实上,在提高编译速度这块,加派人手还是有着非常重要的作用的。
1、并行编译
买个4核的,或者8核的cpu,每次一build,就是8个文件并行着编,那速度,看着都爽。 要是你们老板不同意,让他读读这篇文章:Hardware is Cheap, Programmers are Expensive
2、更好的磁盘
我们知道,编译速度慢很大一部分原因是磁盘操作,那么除了尽可能的减少磁盘操作,我们还可以做的就是加快磁盘速度。比如上面8个核一块工作的时候,磁盘极有可能成为最大的瓶颈。买个15000转的磁盘,或者SSD,或者RAID0的,总之,越快越好。
3、分布式编译
一台机子的性能始终是有限的,利用网络中空闲的cpu资源,以及专门用来编译的build server来帮助你编译才能从根本上解决我们编译速度的问题,想想原来要build 1个多小时工程的在2分钟内就能搞定,你就知道你一定不能没有它 - Incredibuild。
4、并行,其实还可以这么做。
这是一个比较极端的情况,如果你用了Incredibuild,对最终的编译速度还是不满意,怎么办?其实只要跳出思维的框架,编译速度还是可以有质的飞跃的 - 前提是你有足够多的机器:
假设你有solution A和solution B,B依赖于A,所以必须在A之后Build B。其中A,B Build各需要1个小时,那么总共要2个小时。可是B一定要在A之后build吗?跳出这个思维框架,你就有了下述方案:
◦同时开始build A和B 。
◦A的build成功,这里虽然B的build失败了,但都只是失败在最后的link上。
◦重新link B中的project。

H. 同样需要编译器为什么汇编语言比较快

绝大多数情况下,并不是。

事实上除了对CPU工作模式极端熟悉的人,一般人是很难用汇编写出更高效的代码的。
编译器虽然智商比不了人,但是它更精通优化。生成高效的代码需要透彻地掌握硬件的工作模式,每个细节都要考虑清楚。而且这很大程度上是软件更擅长但人并不擅长的繁重无脑又要求极高精确性的机械化工作。

当然专业搞优化的人还是能打败编译器的,因为编译器能做到的人终究还是可以做到。而人要比编译器聪明得多。编译器只能遵循一些规定好的模式进行优化,人可以创造编译器根本不知道的优化方法。某些逻辑靠编译器是没办法生成出来的,只能由人直接用汇编写。汇编语言虽然也要编译,但是一般会和机器指令直接对应,相当于要求CPU在细节上严格按人的思路工作,而高级语言并不能控制太多细节。

I. 编译后的程序比边解释边执行的程序的运行速度快吗为什么

程序的编译是指将人可以理解的代码(如C的源代码)段编译成机器指令码(二级制指令),也就是处理堆栈、处理器、总线的指令,交由计算机自动执行。解释型语言是在需要执行时临时编译运行,执行时多了编译的过程,自然就要慢的多了。
比较特殊的是java,javac命令编译的结果虽然也是二进制文件,但实际也不是机器指令,而是优化后的代码,最后的执行是通过java虚拟机再次编译后执行。所以效率介于编译型和解释型之间。
目前java的执行速度已经有了大幅度的提升,但要想赶上或超越C 或者汇编,理论上是不现实的。

J. 编译一段代码的速度和CPU的线程核心和代码的速度有关吗如果编译一个QQ大小的代码需要多长时间啊

1cpu的速度跟核心数量有关吗?是否数量越多就越快呢?只有在同一家族的CPU中进行比较,核心数量、主频与CPU的运行速度才有正比关系,还有影响的因素是2、3级缓存的大小。核心版本和工艺的升级也有影响。一般在同一家族的CPU中,核心越多、主频越高、缓存越多、版本越新的CPU越快。比如AMDAthlonIIX2250肯定要比AMDAthlonIIX2240要快,但是不是也一定强于主频、缓存、核心数都与X2240差不多的IntelPentiumE6300呢?那就不能武断的说了。需要用各种测试软件去验证。2同核心数目,同主频,同二级缓存哪个快?主板配cpu是看针脚和前端总线,和cpu的二级缓存无关,865的主板如果是478接口的,那就支持P42.8E和P43.2C,何况主板和cpu前端总线都是800mhz,完美支持两个比当然是P43.2C好了,虽然P42.8e是1024的二级缓存,但核心是Prescott内核,和A的核心一样,发热量大,功耗高,而C的核心是NORTHWOOD核心,比Prescott好

阅读全文

与为什么新电脑编译代码速度快相关的资料

热点内容
java九宫格算法 浏览:249
encoder转码新建文件夹 浏览:721
android版本市场占有率 浏览:363
凭订单号抽奖源码 浏览:201
惠省钱app如何下载 浏览:39
春宵秘戏图pdf 浏览:395
android照片墙实现 浏览:430
怎么用一块钱抹布解压球 浏览:717
百度下没密码文件怎么解压 浏览:81
拷贝容器外的文件夹 浏览:145
执行命令后如何取消 浏览:593
java二进制对象 浏览:598
图纸一般都在哪个文件夹 浏览:958
移动网加密视频 浏览:58
如何pdf填充颜色 浏览:474
怎么查看c盘有多少文件夹 浏览:682
程序员那么可爱里面的男主角 浏览:731
编程老师的照片墙 浏览:300
函数未定义但是能编译运行 浏览:974
湖南省常德通用压缩机有限公司 浏览:109