




已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
游戲的優(yōu)化,不僅僅是幀速率,我們將談論什么?,何時何地需要做優(yōu)化? C 和 C+ 的比較 C+中的性能問題 算法優(yōu)先 我們需要 C+ 的高級特性嗎?,優(yōu)化無處不在,最好的優(yōu)化器是你的大腦,而不是編譯器 評測而不是臆測 Windows 游戲不應該有特權 Windows 游戲首先是一個 Windows 程序 每一點資源的節(jié)省都將是有意義的 專家的選擇是不優(yōu)化,FPS?,提高了 10 fps 表示什么含義? 10fps-20fps 100fps-120fps 最高幀速率和平均幀速率 Loading 時間 關心一下 CPU 占用率 了解 Windows 多一點,記時器,TimeGetTime QueryPerformanceCounter RDTSC 精度 多任務環(huán)境的影響 流水線 測不準原則,微觀和宏觀,微觀上的優(yōu)化 CPU指令、流水線吞吐量、等待時間 有限的硬件優(yōu)化 有限的編譯器優(yōu)化 宏觀上的優(yōu)化 算法和代碼結構的改進 減少需要處理的數(shù)據(jù)量,減少處理的頻率和次數(shù),C 與 C+ 微觀上的比較,C 比 C+ 快 10%? 不要迷信書本 證據(jù)? C+ 編譯器的改進 更合理的參數(shù)傳遞方式 Inline 堆棧和函數(shù)調用 靜態(tài)變量的使用,C+提供更強的語言特性,new/delete malloc/free C+ exception setjmp/longjmp 虛函數(shù) 函數(shù)指針數(shù)組 Template 宏 標準庫,C 的優(yōu)勢,簡單 可移植性更強 接口簡潔 更少的二義性 CRT 開銷小 編譯速度快,C+ 需要了解更多,STL,最被人喜愛的容器 std:map std:string std:vector std:list 大多數(shù)情況他們沒有被正確的使用,std:map,插入是很慢的 O(log(N) 有額外的內存消耗 (三個指針+顏色) 大多數(shù)情況,我們需要的只是查找 數(shù)組+二分查找 Hash map 通常可以提高效率,但不絕對 還有更多的優(yōu)化手段 lua 的實現(xiàn) 大話西游的實現(xiàn),std:string,還有一種字符串叫作 const char * const std:string & 不要依賴 COW (copy-on-write) 考慮多線程環(huán)境 良好的設計下,cow 通常多余 Lua 如何處理字符串?,std:vector,std:vector 并不僅僅是數(shù)組 通常我們把 vector 作為數(shù)組使用 Vector:push_back() 常引起內存重分配 vector:reserve() vector:clear() 不一定釋放內存 POD 類型的優(yōu)化 記?。簭?C 語言開始,就支持了數(shù)組,std:list,std:list 是一個雙向鏈表 std:list 有內存的額外開銷 鏈表可以在常數(shù)時間插入,而當 N 不大的時候,優(yōu)勢并不明顯。,正確的使用STL,STL 是 C+ 提供的強有力的工具 STL 的使用都是有開銷的 STL 并不能解決我們所有的問題 有些問題可以用 STL ,但那并不是最好的解決方案 讓代碼達到最佳的性能,需要用我們的大腦,重新發(fā)明輪子?,不要因為你能夠做到而重新實現(xiàn) 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?,優(yōu)化 memcpy:MMX 版本、SSE 版本 任何小于 64k 數(shù)據(jù)復制的優(yōu)化都沒有意義 重寫 string 庫,MyStrlen MyStrcmp CRT 可以做的更好 Intrinsic 函數(shù) #pragma intrinsic(),內存優(yōu)化,展開循環(huán),消除數(shù)據(jù)相關性 數(shù)據(jù)并行處理 減少數(shù)據(jù)結構的尺寸,讓數(shù)據(jù)盡量緊湊的放在一起 數(shù)據(jù)對齊 了解內存的工作方式,內存管理優(yōu)化,C+ 提供了更靈活的內存管理機制 new/delete 不一定是最好的方式(STL就不用) 自定義內存分配器 方便調試 分配速度和內存碎片同樣重要 注意分離模塊的問題 DLL 最容易出錯,算法,C+ 更適合實現(xiàn)更復雜的游戲引擎 引擎的復雜度提升,層次的增加,會降低效率 更高的復雜度是為了宏觀上的優(yōu)化,臟矩形,問題,臟矩形的合并算法并不簡單 合并后的臟區(qū)域并不是一個矩形,不方便做圖片裁減 有許多的物體在屏幕上移動 卷動屏幕 圖像引擎設計的復雜度,改進的臟矩形,分格處理 渲染管道 繪圖操作對象化,滾動優(yōu)化,更大的back buffer 破碎的分格,覆蓋優(yōu)化,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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO/IEC 23090-26:2025 EN Information technology - Coded representation of immersive media - Part 26: Conformance and reference software for carriage of geometry-based point
- 2025至2030中國白色水泥行業(yè)發(fā)展分析及競爭格局與發(fā)展趨勢預測報告
- 2025至2030中國男士帆布鞋行業(yè)供需趨勢及投資風險報告
- 2025至2030中國電商物流行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國特醫(yī)食品行業(yè)發(fā)展分析及前景趨勢與投資報告
- 培訓課件軟件
- 智慧城市基礎設施建設中的通信電纜技術創(chuàng)新
- 幼兒園新教師健康教育培訓
- 心理輔導在學生學習中的重要性
- 從學生到職業(yè)領袖的教育之路
- 2025年四川廣安愛眾股份有限公司招聘筆試參考題庫含答案解析
- 2024起重吊裝及起重機械安裝拆卸工程監(jiān)理作業(yè)指引
- 威脅情報收集與整合-洞察分析
- 期末教師會議校長精彩講話:最后講了存在的問題
- 知名連鎖漢堡店食安QSC稽核表
- 攝影設備采購合同范例
- DB41T 1812-2019 蘋果簡約栽培技術規(guī)程
- 【《三只松鼠公司員工激勵現(xiàn)狀調查及優(yōu)化建議(附問卷)14000字》(論文)】
- 護理不良事件登記本及護理不良事件報告新規(guī)制度
- 農業(yè)土壤檢測技術行業(yè)發(fā)展前景及投資風險預測分析報告
- 廣東省深圳市羅湖區(qū)2023-2024學年二年級下學期期末考試數(shù)學試題
評論
0/150
提交評論