昝道廣 梁肖裕 劉忠青 徐西彤 李晨輝 山東科技大學電氣信息系
隨著計算機硬件的不斷更新升級,其內存因素對于計算機硬件的影響越來越小,已經不能限制程序計算的完善。應用程序在計算機占有空間越來越富裕,程序在使用中不再首要考慮內存因素。但是程序設計的時間性能在很多應用場合依然發揮重要價值,例如實時嵌入式系統、需要處理大量的信息數據情景和對程序運行速度要求高的情景等等。
C++語言是一種能夠同時支持多種編程語言的編程語言集合。在具體程序設計過程中,為發揮其功能的靈活性,未在編譯器生成的程序中顯現出相應的數據結構和代碼。程序設計人員無法在載體上看到數據結構和代碼,只有憑借自身積累的實踐經驗,軟件工程師才會全面系統了解編譯器自動生成的代碼時機和條件,因此很難把握C++程序的時間性能和空間性能。C++是在C語言的基礎上演化而來,它具有C語言的應用優勢,同時彌補了C語言的缺陷,很多C語言不能支撐的軟件開發、系統開發和引擎開發,都可以使用C++。現階段,計算機硬件的運行速度越來越快,設計內存空間也越來越大,需要引起注意的是對時間性能的優化方面,還需要進一步在程序設計中加以優化改進。
Inline函數在程序編譯過程中,由調用指令轉變為函數體代碼,即在編譯后的可執行文件中,將原本需要調用函數的場合,更改為該函數的代碼,直接減少了函數調用過程中的進棧和出棧操作步驟,因此提升了程序運行中的時間性能。以下為通過合理使用inline來優化時間性能的分析。直接在調用處插入函數代碼,使得程序編譯對代碼上下文信息有更加深入的了解,發揮出這些信息的支持作用,幫助人們利用編譯器來優化代碼,但是我們并不詳細了解優化流程和優化內容。如果不使用inline程序執行到函數調用位置,需要具體執行函數體所在地方的代碼。一般函數調用位置和函數代碼所在地方并不接近,容易造成操作系統的缺頁中斷,而在要求操作系統將缺頁位置處的代碼移植到硬盤內存時,需要消耗的時間就會呈現數量級增加情況,但是在使用inline的情況下就會降低缺頁中斷的發生率。
C++語言是從C語言的基礎上發展和演化而來的程序設計語言,C++語言具有鮮明的特性和典型特征,例如虛函數和C++的虛函數都是多態場合下運行,實現了很多程序設計的優化和升級,創新出這種功能的新用法,但是并非完全都是優勢而不存在缺陷,由于虛函數的使用會加強更大空間壓力和時間壓力,降低了程序的空間性能和時間性能。因此在具體程序設計和運行過程中,特定的虛函數類對應特定的虛函數表,函數表上主要保存的是函數指針,每次對虛函數進行實例化操作后就增加相應的虛函數表數量,這一過程耗費一定量的時間和空間。謹慎使用虛函數,減少降低程序時間性能的機會,考慮其它辦法以此保障程序設計中的時間性能。
C++程序中經常使用到指針類型。如果能夠在適當場合下合理使用指針,不僅可以節省大量內存,而且還有助于節省運行時間。例如,如果需要將眾多復雜的信息保存在程序內部,我們需要將一個信息單元保存在單項種類中,然后對這種類型的對象保存在特定的某種STL容器內部。如果是直接保存對象,一方面會讓單項個體信息存儲在多個對象中,浪費了大量的內存空間;另一方面選擇對象無論是從容器中存人或者是取出都需要大量的運行時間。但是如果將指針作為存儲對象,那么對應的信息單元僅僅需要個體對象保存完成,并且指針從容器中存入和取出的時間性能效率更高。但是由于指針容易導致內存泄露,不方便軟件設計。因此軟件工程師必須明確控制指針在特定的時間內被釋放,如果沒有將泄露內存,并且對程序產生異常。
綜上所述,時間性能優化是C++程序設計中保證開發質量的必然要求,同時也是衡量的重要指標。在空間性能已經不再成為限制性因素的情況下,軟件設計的更多精力應該集中于程序時間性能優化方面。本文主要對C++程序設計中的時間優化方法做出分析,在具體程序設計中,還可以利用改進數據結構和算法措施,來對時間性能加以優化。