導航:首頁 > 源碼編譯 > 編譯器優化

編譯器優化

發布時間:2022-02-06 20:40:46

A. 怎麼指定某段代碼不被編譯器優化掉

在C語言中, 某些語句,如:
int a;
a = 0;
a = 1;
a =2; 這個可能編譯器會把前面兩句給優惠掉, 這個如果 前面兩句也是必須要執行的, 可以把 int a 改成 volatile int a。
在編譯的時候, 編譯器可能會預測到某個變數的值, 就把中間的沒有必要的語句給優化掉,volatile 關鍵字就是告訴編譯器,不要做這樣的預測性優化, 按照文本代碼來翻譯。

B. 編譯器 優化

編譯是從源代碼(通常為高階語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低階語言或機器語言)的翻譯過程。然而,也存在從低階語言到高階語言的編譯器,這類編譯器中用來從由高階語言生成的低階語言代碼重新生成高階語言代碼的又被叫做反編譯器。也有從一種高階語言生成另一種高階語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的可執行程序。
從他的原理我們就好優化了,但是方法很多的

C. 這是VS2010編譯器優化嗎怎麼改

這個問題比較深, 所以只有哥來回答你了。

你說的問題在VS2008上也是相同的表現,這個是因為微軟的庫實現不是直接實現在你call的generate_n這個函數上的,而是有好幾重轉調,所以造成你即使對第一重調用的 模板函數用 引用去實例化,由於後面轉調的函數都是使用值去實例化的,所以實際你得到的運行效果還是值語義的。

比如你call 函數 func1<A&>(), 但是由於func1<A&>() 調用了func2<A>(), 又繼續調用了func3<A>(), 最後func3里操作的其實是一個值拷貝,所以影響不到外面的引用的對象。

哥去 微軟報了個bug,裡面寫得比較細,你可以仔細看,http://connect.microsoft.com/VisualStudio/feedback/details/676282/vs-2010-sp1-doesnt-conform-to-the-c-standard-library-a-tutorial-and-reference

D. 如何使用ccs c編譯器中的優化選項

CCS3.3既支持c程序設計又支持C++,當你的源程序的文件後綴採用.c時,CCS用c編譯器編譯程序,當使用.cpp後綴時,用C++編譯器。

E. 編譯器的優化到底能夠優化到什麼程度

在不改變程序行為的前提下可以任意改寫代碼

F. 編譯器的編譯器優化

應用程序之所以復雜, 是由於它們具有處理多種問題以及相關數據集的能力。實際上, 一個復雜的應用程序就象許多不同功能的應用程序「 粘貼」 在一起。源文件中大部分復雜性來自於處理初始化和問題設置代碼。這些文件雖然通常占源文件的很大一部分, 具有很大難度, 但基本上不花費C PU 執行周期。
盡管存在上述情況, 大多數Makefile文件只有一套編譯器選項來編譯項目中所有的文件。因此, 標準的優化方法只是簡單地提升優化選項的強度, 一般從O 2 到O 3。這樣一來, 就需要投人大量 精力來調試, 以確定哪些文件不能被優化, 並為這些文件建立特殊的make規則。
一個更簡單但更有效的方法是通過一個性能分析器, 來運行最初的代碼, 為那些佔用了85 一95 % CPU 的源文件生成一個列表。通常情況下, 這些文件大約只佔所有文件的1%。如果開發人員立刻為每一個列表中的文件建立其各自的規則, 則會處於更靈活有效的位置。這樣一來改變優化只會引起一小部分文件被重新編譯。進而,由於時間不會浪費在優化不費時的函數上, 重編譯全部文件將會大大地加快。

G. 被編譯器優化掉 是什麼意思

沒聽說過,難道是注釋和空行之類的,在源代碼被編譯成exe程序時,直接被去掉了,被稱為優化掉?

H. 如何防止因編譯器開啟優化,而導致程序執行錯誤

我的經驗是:未優化的c程序可正常運行,優化後不能運行,那一定是我的程序有問題。我還沒經歷過不是我程序的情況。
發現這種不易發現的問題,需要看匯編碼。
避免的方法,我的經驗:寫c程序,盡量規矩;似是而非的概念,一定要搞清楚,別僥幸。因為僥幸而留的雷,現在不出問題,將來一定會出問題;不優化不出問題,優化就出問題。
最後要說,每個應用程序,都讓他開優化運行,只要時間允許,一定要查出開優化後出問題的原因。時間不允許,只能不開優化湊合著,在有時間的時候繼續查問題。

I. 如何在編譯java的時候,取消編譯器對編譯常量的優化

遇到的問題是想重新編譯某個java文件(比如A.java),裡面有個常量(比如finalinta)和上次編譯時不一樣,但是另一個使用A.class的a的文件(比如B.java)由於在javac在上次編譯的時候將當時的A.class裡面的常量直接給內聯了,所以就達不到想要的效果。
如果是這樣的話,對於String可以使用.intern()來防止編譯器進行優化,對於其他類型,可以要麼不定義為常量,要麼將常量定義為private,然後使用一個static方法來返回這個常量。

J. 編譯器優化怎麼定義

常見的優化和變新有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。 優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threaded code)。

機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令,如何合並幾句代碼成一句等等。

閱讀全文

與編譯器優化相關的資料

熱點內容
極簡歐洲史中文版pdf 瀏覽:908
python顯示變數值 瀏覽:387
副路由器為什麼要關伺服器 瀏覽:575
國家反詐騙app蘋果怎麼設置 瀏覽:464
我的世界如何用指令造伺服器方熊 瀏覽:304
鴨題庫是哪裡的培訓機構app 瀏覽:689
如何對伺服器取證 瀏覽:440
有什麼系統像友價源碼 瀏覽:570
圓柱彈簧壓縮量 瀏覽:811
我的世界國際版為什麼沒法進去伺服器 瀏覽:103
我的世界如何創造一個伺服器地址 瀏覽:837
皮皮蝦app怎麼玩視頻教程 瀏覽:253
python整型轉化字元串 瀏覽:804
android數據共享方式 瀏覽:375
編譯環境控制台 瀏覽:620
寧波欣達壓縮機空氣過濾器價位 瀏覽:665
冪函數的運演算法則總結 瀏覽:138
方舟自己的伺服器怎麼搞藍圖 瀏覽:915
校園網怎麼加密ip 瀏覽:786
kotlin可以編譯雙端嗎 瀏覽:327