1. 程式人生 > >《遊戲引擎架構》讀書筆記-遊戲引擎中的C++

《遊戲引擎架構》讀書筆記-遊戲引擎中的C++

《遊戲引擎架構》在兩年前就買了,而且自己也大體的看過一遍,因為自己想學習引擎的底層知識,所以重新又找出了這本書再讀一遍,並把根據自己的理解寫一些讀書筆記在這裡與大家交流。

       閒話少續,開始本篇的內容,這本書的第一部分是基礎篇,第一章概述了一些引擎概念,第二章講解了一些工具的用法(Visual Studio等),第三章介紹了C++,和一般的C++書不一樣的是,本書講解的C++應該更多的是引擎中常用的一些概念,另外還包括一些軟體工程基礎思想,筆者覺得比較重要的有以下幾點

      首先,“讓錯誤的程式顯而易見”,這部分是在介紹編碼標準的時候介紹的,其中推薦了一篇文章--“讓錯誤的程式顯而易見”(

http://chinesetrad.joelonsoftware.com/Articles/Wrong.html),這篇文章介紹了通過命名方式的字首反應變數的性質,從而讓錯誤的程式顯而易見,介紹了匈牙利命名法的使用方式

       然後是物件的記憶體佈局,這部分會對程式的效能優化很有幫助,在class和struct中,編譯器不會把資料程式設計師緊湊的包裹在一起,因為每種資料都有其天然的對齊方式,供CPU高效的從記憶體讀/寫。對齊方式即記憶體地址為對齊位元組大小的倍數,另外編譯器可能會為了陣列的對齊,會在末端加入填充,以下是32位系統下各個型別的大小(單位:位元組):

int:4位元組;float:4位元組;double:8位元組;bool:1位元組;char:1位元組;short:2位元組;long:4位元組或者8位元組

       需要說明的是,當class中有虛擬函式的時候,或者是繼承的類中有虛擬函式的時候,通常會在類的佈局最前端加入一個虛表指標,它指向名為虛擬函式表的一個數據結構,因為指標是int型別的。

       瞭解記憶體佈局的意義是,當我們寫類和結構體的時候,最優化的處理方式是自己按照記憶體佈局規則把資料排列好,從而可以降低類或者結構體所佔的大小。

       另外需要說明的是型別大小的問題,因為標準C++基本資料型別設定為可以移植的,因而不做明確的規定,在遊戲引擎的開發中,有時候需要知道某些變數的確切尺寸,多數遊戲引擎會自定義基本的資料型別;另外還有大端和小端的轉換問題,Wii、Xbox360和PS這種使用PowerPC開發的小端裝置可能會涉及到資料轉換問題。

       最後介紹了實現錯誤檢測及處理,將斷言分為兩個巨集中,方便在釋出版時關掉不必要的斷言從而避免不必要的效率損失。