




已閱讀5頁,還剩48頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
游戲的優化,不僅僅是幀速率,我們將談論什么?,何時何地需要做優化? C 和 C+ 的比較 C+中的性能問題 算法優先 我們需要 C+ 的高級特性嗎?,優化無處不在,最好的優化器是你的大腦,而不是編譯器 評測而不是臆測 Windows 游戲不應該有特權 Windows 游戲首先是一個 Windows 程序 每一點資源的節省都將是有意義的 專家的選擇是不優化,FPS?,提高了 10 fps 表示什么含義? 10fps-20fps 100fps-120fps 最高幀速率和平均幀速率 Loading 時間 關心一下 CPU 占用率 了解 Windows 多一點,記時器,TimeGetTime QueryPerformanceCounter RDTSC 精度 多任務環境的影響 流水線 測不準原則,微觀和宏觀,微觀上的優化 CPU指令、流水線吞吐量、等待時間 有限的硬件優化 有限的編譯器優化 宏觀上的優化 算法和代碼結構的改進 減少需要處理的數據量,減少處理的頻率和次數,C 與 C+ 微觀上的比較,C 比 C+ 快 10%? 不要迷信書本 證據? C+ 編譯器的改進 更合理的參數傳遞方式 Inline 堆棧和函數調用 靜態變量的使用,C+提供更強的語言特性,new/delete malloc/free C+ exception setjmp/longjmp 虛函數 函數指針數組 Template 宏 標準庫,C 的優勢,簡單 可移植性更強 接口簡潔 更少的二義性 CRT 開銷小 編譯速度快,C+ 需要了解更多,STL,最被人喜愛的容器 std:map std:string std:vector std:list 大多數情況他們沒有被正確的使用,std:map,插入是很慢的 O(log(N) 有額外的內存消耗 (三個指針+顏色) 大多數情況,我們需要的只是查找 數組+二分查找 Hash map 通??梢蕴岣咝?,但不絕對 還有更多的優化手段 lua 的實現 大話西游的實現,std:string,還有一種字符串叫作 const char * const std:string & 不要依賴 COW (copy-on-write) 考慮多線程環境 良好的設計下,cow 通常多余 Lua 如何處理字符串?,std:vector,std:vector 并不僅僅是數組 通常我們把 vector 作為數組使用 Vector:push_back() 常引起內存重分配 vector:reserve() vector:clear() 不一定釋放內存 POD 類型的優化 記?。簭?C 語言開始,就支持了數組,std:list,std:list 是一個雙向鏈表 std:list 有內存的額外開銷 鏈表可以在常數時間插入,而當 N 不大的時候,優勢并不明顯。,正確的使用STL,STL 是 C+ 提供的強有力的工具 STL 的使用都是有開銷的 STL 并不能解決我們所有的問題 有些問題可以用 STL ,但那并不是最好的解決方案 讓代碼達到最佳的性能,需要用我們的大腦,重新發明輪子?,不要因為你能夠做到而重新實現 STL 幾乎所有的 MyVector MyString MyMap 都不如 std:vector std:string std:map 更多的了解 STL 更多的了解 C+,CRT 的使用,sprintf(s,”%d”,n); 為什么不用 itoa ? sprintf(s,”); 為什么不用 s0=0; printf 與 puts 不要忽略 CRT 的開銷,重寫 CRT?,優化 memcpy:MMX 版本、SSE 版本 任何小于 64k 數據復制的優化都沒有意義 重寫 string 庫,MyStrlen MyStrcmp CRT 可以做的更好 Intrinsic 函數 #pragma intrinsic(),內存優化,展開循環,消除數據相關性 數據并行處理 減少數據結構的尺寸,讓數據盡量緊湊的放在一起 數據對齊 了解內存的工作方式,內存管理優化,C+ 提供了更靈活的內存管理機制 new/delete 不一定是最好的方式(STL就不用) 自定義內存分配器 方便調試 分配速度和內存碎片同樣重要 注意分離模塊的問題 DLL 最容易出錯,算法,C+ 更適合實現更復雜的游戲引擎 引擎的復雜度提升,層次的增加,會降低效率 更高的復雜度是為了宏觀上的優化,臟矩形,問題,臟矩形的合并算法并不簡單 合并后的臟區域并不是一個矩形,不方便做圖片裁減 有許多的物體在屏幕上移動 卷動屏幕 圖像引擎設計的復雜度,改進的臟矩形,分格處理 渲染管道 繪圖操作對象化,滾動優化,更大的back buffer 破碎的分格,覆蓋優化,C+的高級特性,天使還是惡魔?,Template 避免重復的代碼,void _blit(pixel *dst,const pixel *src,size_t s,bool mask_blit) for (size_t i=s;i!=0;-i,+dst,+src) if (!mask_blit | *src!=mask_color) *dst=*src; template void _blit(pixel *dst,const pixel *src,size_t s) for (size_t i=s;i!=0;-i,+dst,+src) if (!mask_blit | *src!=mask_color) *dst=*src; ,void blit(pixel *dst,const pixel *src,size_t s) _blit(dst,src,s); void mask_blit(pixel *dst,const pixel *src,size_t s) _blit(dst,src,s); ,矩陣運算,Matrix A,B,C; A=B+C; Matrix operator+(const Matrix ,Expression Templates,template class add_type const T ,class Matrix /* . */ Matrix /* . */ ,編譯時計算,template class factorial public: enum value = N * factorial:value ; ; template class factorial public: enum value = 1 ; ;,冒泡排序,inline void compare_swap(int ,template struct inner_loop static inline void expand(int* data) compare_swap(*data, dataN); inner_loop:expand(data); ; template struct inner_loop static inline void expand(int*) ; template struct sort static inline void expand(int* data) inner_loop:expand(data); sort:expand(+data); ; template struct sort static inline void expand(int* data) ;,int main() int a=3,2,1; const int len=sizeof(a)/sizeof(a0); sort:expand(a); for (int i=0;i:expand(a) 展開后的代碼 compare_swap(*data,data2); compare_swap(*data,data1); +data; compare_swap(*data,data1);,盡可能的在編譯時運算?,還有更多的 template 技巧 Modern C+ Design - Generic Programming a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石油開采業的資源儲量與利用現狀考核試卷
- 竹材在復合材料領域的應用考核試卷
- 電子電路的智能城市基礎設施建設考核試卷
- 童車制造企業市場拓展與渠道建設考核試卷
- 電視機制造業的可持續發展目標與實現路徑考核試卷
- 那一段什么的時光初三語文作文
- 理想初二語文作文
- 工藝美術創新與實踐考核試卷
- 移動通信技術在智慧金融的應用考核試卷
- 紙張與紙板生產中的質量檢測與控制考核試卷
- 輸電線路外力破壞危害及特點
- 醫院工作中常見的法律風險和對策專家講座
- 大學生創業計劃書-校園跑腿PPT
- 2023年湖南省中學生生物學奧林匹克競賽選拔賽試題及答案
- 升壓站建筑工程施工作業指導書
- GB/T 27548-2011移動式升降工作平臺安全規則、檢查、維護和操作
- GB/T 24825-2009LED模塊用直流或交流電子控制裝置性能要求
- 2023年湖南公務員面試真題及解析匯總
- 部編人教版語文九年級下冊《18天下第一樓》課件
- 2023年東莞市網格員招聘筆試題庫及答案解析
- 老舊小區改造要素設計課件
評論
0/150
提交評論