• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 創建可移植的64位應用程序代碼

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    靈活地使用編譯器開關選項可生成具移植性且高度優化的代碼,你用了嗎? 充分利用AMD 64位技術需要以下三個條件:必要的AMD64硬件平臺,一個可支持AMD64的操作系統,和一個支持AMD64 的64位編譯器。AMD公司提供了第一個條件,Window和 Linux 提供了第二個條件

    靈活地使用編譯器開關選項可生成具移植性且高度優化的代碼,你用了嗎?

    充分利用AMD 64位技術需要以下三個條件:必要的AMD64硬件平臺,一個可支持AMD64的操作系統,和一個支持AMD64 的64位編譯器。AMD公司提供了第一個條件,Window和Linux提供了第二個條件,而一些開發工具提供了最后一個條件。這篇文章主要著重于闡述怎樣設置Windows(Visual C++ 2005)及Linux(gclearcase/" target="_blank" >cc 3.3.3)環境下的C/C++編譯器選項。

    雖然PathScale和Portland Group公司等幾個開發工具提供商推出了支持AMD64架構的編譯器產品,但對于大多數Windows和Linux下的開發者來說,Microsoft和gcc編譯器仍舊是不二的選擇。

    Microsoft編譯器

    雖然Microsoft還沒有完全發布針對AMD64的操作系統,但通過它的消費者預覽計劃,已經提供了一個beta版操作系統可供使用,這個叫做Windows XP Professional x64的系統已經可以獲取,這個產品的早期版本有不同的名字,所以不要弄混淆了。

    在這要討論的C/C++編譯器是Microsoft Visual Studio 2005 Beta的其中一個組件,MSDN的訂閱用戶不用任何費用就可以獲得。有關編譯器的信息及開發環境目前都是已知的。

    在開始設置編譯器選項之前,必須要注意的是,沒有任何選項可以把程序代碼從32位轉換成64位。要移植的代碼必須多留意ILP(整型、長整型和指針),如:一個整型占用幾比特位,長整型、指針呢。這三種類型的數據也許代表了為什么移植的程序會悄無聲息地失敗的一系統問題。

    在x64的應用程序二進制層面上,ILP分別是32位、32位和64位(注意這與64位Linux上的ILP不同),所以,在移植代碼到新平臺之前,要充分考慮這些數據的位寬。-Wp64 -W3,這一對應用于32位代碼的編譯器選項可以標識出移植到64位平臺的潛在問題。

    選項Wp64是主要的作用因素,而-W3只是簡單地告訴編譯器要使用三級警告,而三級警告通常是建議性的,比如就像可移植性問題(但較低的警告級別通常會指出更嚴重的問題所在),這些選項將會捕捉到對數據值的無意識截斷。從個人角度來說,不管目標平臺是什么,都要打開這些選項,以保證編寫出的代碼都具有可移植性。

    如果使用Visual Stuio .NET,通??梢栽?工程"->"屬性"對話框中,在GUI模式下打開這些選項,然而,你還是可以從命令行模式使用make [程序名]或批處理文件,來編譯程序,通常是在命令行中鍵入 cl 命令,這個命令將調用C/C++編譯器。命令后面緊接著依次是:開關選項、文件名、鏈接期間選項。

    一旦你寫好的代碼能正常運行,通過設置以下的優化選項,可在運行平臺上得到更好的執行效率(以下只是針對AMD平臺的建議)。

    -O2打開幾個標準的優化步驟

    -Ob2打開內聯函數展開(小函數將在被調用處內聯處理,這比直接調用它們效率更高)

    -GL打開內部過程優化(只在函數間)

    -fp:在浮點數學運算中,如果只是導致精度輕微的損失,那么加快運算形式。如果需要極度精確的浮點結果,可能你要避免使用此選項,但如果在數字的最后一些位中,程序可接受取整(四舍五入),使用此選項將會極大地提高浮點執行效率。在本文后面的參考資源中,會有關于此折衷方法的詳細解釋,同樣也會解釋通過使用pragma,怎樣在函數調用函數時打開快速浮點功能。 Visual C++ 2005帶來了配置向導優化(profile-guided optimization PGO),這種形式的優化只是由兩個步驟得來的結果。首先,代碼將會通過設備化(-LTCG:PGI)選項來編譯,接下來程序會運行,在運行期間,設備化代碼產生一個可執行的概括文件,這個文件包含了哪些函數被調用,是以什么順序呢等信息。

    運行過幾次之后,程序將在源代碼級重新編譯,并且使用設備化文件作為輸入。編譯器此時在程序執行模式的基礎之上,再進行一次附加的優化(這次編譯使用-LTCG:PGO選項)。

    設備化可以告訴編譯器許多重要的信息,例如:如果兩個函數總是一個接另一個地執行,可能的話,就把它們放在同一個內存頁當中?;贏MD芯片的電腦上,Microsoft自己的測試表明(相關詳見資源中有關PGO的文章),在benchmark測試中,配置向導優化將帶來大約10%的性能提升。

    如果程序不是面向大眾的,可以考慮關閉一個Microsoft缺省打開的安全特性:偵測緩沖溢出(-GS)。如果程序不是多線程的,也可以考慮關閉產生線程安全代碼的缺省選項(-D_ST_MODEL)。關閉這兩個選項會帶來輕微的性能提升,但要確定必須是在沒有犧牲安全的情況下換來這點速度提升。拿不準的話,還是讓它們缺省打開吧。

    利用上述的這些開關控制選項,可得到Microsoft Windows平臺上干凈、快速、且可具移植性的程序代碼,那我們再來看看Linux。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>