導航:首頁 > 源碼編譯 > 為什麼新電腦編譯代碼速度快

為什麼新電腦編譯代碼速度快

發布時間: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好

閱讀全文

與為什麼新電腦編譯代碼速度快相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:769
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:844
安卓怎麼下載60秒生存 瀏覽:803
外向式文件夾 瀏覽:240
dospdf 瀏覽:431
怎麼修改騰訊雲伺服器ip 瀏覽:392
pdftoeps 瀏覽:496
為什麼鴻蒙那麼像安卓 瀏覽:736
安卓手機怎麼拍自媒體視頻 瀏覽:186
單片機各個中斷的初始化 瀏覽:724
python怎麼集合元素 瀏覽:481
python逐條解讀 瀏覽:833
基於單片機的濕度控制 瀏覽:499
ios如何使用安卓的帳號 瀏覽:883
程序員公園采訪 瀏覽:812
程序員實戰教程要多長時間 瀏覽:979
企業數據加密技巧 瀏覽:135
租雲伺服器開發 瀏覽:814
程序員告白媽媽不同意 瀏覽:337
攻城掠地怎麼查看伺服器 瀏覽:601