概述:VS 2010 通過添加C++0x 標準核心語言功能,并通過修改標準庫來利用這些新的語言功能,提供了一種更為先進的編程模型。有新的并行編程庫和可簡化并行程序的創建工具。開發人員的整體性能和工作效率的得到提高。在設計時、生成時、編譯時和鏈接時從改進的庫性能和其他功能有了很大的改進。
關鍵詞:VS 2010; C++/MFCIntelliSense
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)21-5780-02
Brief VS 2010 in C++/MFC function
SHEN Zhao-guo,LIU Zhao-qian
(Biological Engineering College Yancheng, Yancheng 224051, China)
Abstract: VS 2010 by adding the core C++0 x standard language features, and by modifying the standard library to take advantage of these new language features, provides a more advanced programming model. A new parallel programming library and the creation of tools to simplify parallel programming. Developer's overall performance and efficiency is improved. build, the compile time and link database from the improved performance and additional functionality has been greatly improved.
Key words: VS 2010; C++/MFC intelliSense
1 更快的編譯和更好的性能
VS 2010 還通過多方面增強編譯器后端的代碼生成功能,提高了使用VC ++編譯器生成的應用程序的編譯速度、質量和性能。某些特定應用程序的性能取決于工作集。通過此版本中進行的多項優化,x64 體系結構的代碼大小縮減了3%到10%,從而提高了此類應用程序的性能。
單指令多數據代碼生成(對于游戲、音頻、圖形開發非常重要)已經過優化,可以提高性能和代碼質量。所做改進包括打破錯誤依賴關系、向量化常量向量初始化以及通過更好地分配 XMM 寄存器消除多余的負載、存儲和移動。還優化了__mm_set_**和__mm_set1_**系列。
為改進性能,應使用鏈接時間代碼生成和按配置優化生成應用程序。x64 平臺上的編譯速度已通過優化x64代碼生成而得到提高。LTCG編譯通常比非LTCG編譯需要更長時間,對于大型應用程序更是如此。在VS 2010中,LTCG 編譯速度提高高達30%。引入了一個寫入PDB 文件的專用線程,因此在使用/DEBUG開關時會看到鏈接時間的縮減。
通過添加對被檢測二進制文件的非鎖定版本的支持,PGO 檢測的運行速度有所提高。還有一個新的POGO選項 PogoSafeMode,用于指定優化應用程序時使用安全模式還是快速模式。快速模式是默認行為。安全模式是線程安全的,但比快速模式要慢。
編譯器生成的代碼的質量有所提高。現在完全支持高級矢量擴展 (AVX),這對于AMD和Intel處理器中通過固有選項和/arch:AVX選項進行大量浮點計算的應用程序非常重要。使用/fp:fast選項可以使浮點計算更為精確。
2 IntelliSense和設計時效率
VS 2010 中包含了全新的IntelliSense和瀏覽基礎結構。除了幫助調整和響應具有大型基本代碼的項目,此基礎結構改進還帶來了一些新的設計時效率功能。
如實時錯誤報告和快速信息工具提示這樣的IntelliSense功能基于新的編譯器前端,即使代碼文件正在修改中,該前端也能分析完整的轉換單元以提供關于代碼語義的豐富且準確的信息。
所有代碼瀏覽功能現在都使用SQL中存儲的源代碼信息,該數據庫啟用了索引功能并具有固定的內存占用量。VS 2010始終具有響應能力,當編譯單元由于頭文件發生更改而重新分析時,不再需要等待。
IntelliSense實時錯誤報告在瀏覽和編輯代碼時顯示編譯器質量語法和語義錯誤。將鼠標懸停在錯誤上可查看錯誤消息(圖1)。錯誤列表窗口也會顯示當前查看的文件中的錯誤以及編譯單元其他位置的 IntelliSense 錯誤。不必進行生成即可獲得所有這些信息。
此外,在鍵入#include時會在下拉列表中顯示相關包含文件的列表,此列表隨您的鍵入而精簡。
3 全新的定位功能
新的“定位”功能將幫助您更有效地搜索文件或符號。此功能根據您鍵入的子串給出實時搜索結果,將輸入字符串與任意項目中的符號和文件對照匹配,圖2。此功能還適用于C#和VB文件,并且可進行擴展。
調用層次結構可以定位從某一特定函數調用的所有函數,以及對特定函數進行調用的所有函數。這是以前的VS 版本中存在的“調用瀏覽器”功能的改進版本。調用層次結構”窗口組織得更好,對同一窗口中出現的任何函數同時提供調用來源和調用目標樹。
雖然所有代碼瀏覽功能都可用于純C++和C++/CLI,但像實時錯誤報告和快速信息這樣的 IntelliSense 相關功能在VS 2010最終版中不可用于C++/CLI。
此版本中還對其他一些主要編輯器功能做出了改進。用于在整個解決方案中搜索對代碼元素的引用的“查找所有引用”功能現在更為靈活。使用右鍵單擊上下文菜單中的“解析結果”選項可進一步精簡搜索結果。
4 標準庫改進
標準C++庫的大部分都已重新編寫,以便利用新的C++0x 語言功能并提高性能。標準庫充分利用rvalue引用來提高性能。如向量和列表這樣的類型現在有其自己的move構造函數和move賦值運算符。向量重新分配通過選擇move構造函數利用move語義,因此如果類型有move構造函數和move賦值運算符,庫將自動選擇使用。
現在,在構造對象時,可以在新的C++0x 函數模板make_shared
auto sp =make_shared
(args);
在VS 2008 中獲得同樣的功能須編寫代碼,使用 make_shared
vector
for (auto i = v.cbegin(); i != v.cend(); ++i) { }
VS 2010 在標準庫中增加了各種C++0x 文章中建議的大多數算法。標準庫中現在提供了 Dinkumware 轉換庫的一個子集,因此可以輕松進行像 UTF-8 到 UTF-16 這樣的轉換。此外,上一版本中存在于命名空間 std::tr1 中的許多 TR1 功能現在都納入了標準庫中的std命名空間。
5 總結
VS 2010是 VC ++發展過程中的一個主要版本,為開發人員在很多方面帶來了方便。在本文中,只是介紹了眾多改進中的常見的幾個功能,這些功能使得開發的效率得到明顯提升。
參考文獻:
[1] 王金庫,孫連云.Visual C++程序設計實訓教程[M].北京:科學出版社,2004.
[2] 王育堅.Visual C++面向對象編程教程[M].北京:清華大學出版社,2009.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文