UE4,內存分配和跟蹤——方案設計原則

在穿插了內存優化之后,我們回到內存分配與跟蹤。接上次所說,我想針對AAA游戲發布做必要的內存分配和跟蹤,而不需大量時間來做內存優化。

方案需求

大多數AAA游戲有大量資源需要頻繁調入調出系統內存和顯存。在沙盒游戲中更嚴重,而大場景游戲(例如《NBA2015》)稍好些。不管怎樣,解決方案需要快速并提供正確的數據給所有的分配。一個快速但不提供適當跟蹤工具的解決方案是不可取的,或提供了合適的跟蹤工具但速度很慢也是不行的。兩項在衡量中都是很重要的。同時,所有分配必須通過它,也就是說客戶端代碼或第三方庫不自己分配內存,全局的new和delete操作應該override(重寫)。

跟蹤信息

解決方案必須提供相關的內存跟蹤信息。其中,信息應包括所有的內存占用,具體到某段內存對應的分配地址,包括所有內存的。任何內存分配都需要有相關的跟蹤信息,什么時候分配的,并可被程序員用來檢測問題。

常規信息

提供的常規信息應該非常簡練。包括如下內容:

分配字節數

分配次數

分配字節數峰值

分配次數峰值

內存分配分組

就像有不同的小組或團隊一樣,說到游戲的不同功能時,需要按組進行分配。一些組用來渲染,游戲設置,UI,音頻等等。不同分組有不同的內存分配模式和需求。正因如此,標準的內存分組分配是個好主意,優點如下:

優化內存分配設置。并不是所有分組都有同樣的分配需求,所以最好是每組都可進行分配設置。也就是說比如:并不是所有組都需要互斥的分配器,并不是所有組都用同一個小塊分配器等等。

預算跟蹤與強制執行.每組分別擁有一定量RAM用來實現跟蹤,系統程序員可在不同組協調分配。基本上,這就可以保證它們共享事務,所有內存都在掌控之中。

便于檢測崩潰問題。由于所有分配都有與組相對應的分配器設置,這就容易解決崩潰或在分配中出現的問題。分組提供了良好的初始環境。

性能表現更優。由于并不是所有的分組或分配都需要互斥,這些開銷可以避免。對于需要互斥分配器的組也會降低發生沖突的可能性,因為并不只有一個互斥分配器(比如:全局分配器)加鎖。在決定內存分配方式時,要權衡絕對性能與內存峰值二者。

分配命名

為識別不同的分配,應該為所有的分配“命名”。名字表示誰需要內存,也許可以強制命名規則,但為了跟蹤內存分配,這些標簽應該是可以訪問的。為提高性能,這些標簽應該只在非發布版本上有效。

分配域

解決方案必須可以為每個線程的分配域的堆提供更多的上下文信息。它比使用堆棧的分配提供更好的上下文信息,并且很容易獲取調用堆棧。在虛幻一個示例中,在UObject創建過程中創建域,這樣該Object相關的所有分配都在該域內。所有非域內的分配仍屬于全局域。下面是作為葉節點分配域的示例和相關數據:

Main Thread? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?Pointer? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Bytes? ?? ???Group

Global Scope

UGameEngine::Init

/Game/Maps/LandscapeMap.umap

AddToWorld

PersistentLevel

ConstructObject

FPhysXAllocator::allocate? ?? ???0x000000000b093fe0? ?? ???131720? ?? ???Physics

分配標志

分配可根據分配器不同的含義來提供可選標志。比如:

生命周期標志。提供關于分配的生命周期的提示。當減少分配的內存碎片時,分配器會更加智能。

分配清空標志。分配器就可以在返回之前清空已分配的內存。

性能

即便是帶可跟蹤功能的非發布版本,解決方案也必需達到可被接受的性能。可接受就意味著在有內存跟蹤的情況下,每幀耗時不能超過50ms。若超過這個值,用戶就會盡量避免使用跟蹤功能了,這是滑坡,不得不在最糟糕的時候即版本發布時恢復。當然,性能損失和常規消耗應該在發布版本時降到零。

分配分組

為實現可能的最佳分配方法而不必大大提高客戶端代碼復雜度,為每組定義多個分配器就是順理成章的。這些分配器可被順序調用,每個分配器都會成功返回分配的內存。比如:常規組有三個分配器:

靜態小塊分配器(SSBA)。它是靜態分配小塊的分配器,不會增長,接受最大分配空間為256字節。

動態小塊分配器(DSBA)。它是動態分配小塊的分配器,可根據需要動態增長,最大空間為1024字節。

全局分配器(SA)。系統標準分配器,可分配任意大小內存。

若需要1032個字節的內存,就會先嘗試SSBA,DSBA,最好向SA請求內存。若一個分配器就可以滿足需求,那就只用一個好了。比如:使用jemalloc(譯者注:開源的內存分配庫),它使用合理的加鎖機制可實現不同大小的內存分配。

聯系方式:0755-81699111

課程網址: http://www.vrkuo.com/course/vr.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,816評論 18 139
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,330評論 11 349
  • word直接復制來了,格式就不改了。至于這門課怎么復習,只要平時實驗都認真完成、報告認真寫,平時分都很高;考試的話...
    Jozhn閱讀 4,609評論 0 8
  • 小小小小姑娘們,讓仙人拿滑板追她們個小不點,滿院子追,把孩子們累的夠嗆,喜歡讓叔叔追?也是大姑娘叔叔都追膩了,還是...
    縱情嬉戲天地間閱讀 232評論 0 0
  • 如果我說,我練習寫作是為了兒時夢想,這確實有點自欺欺人了。這快節奏的都市生活,單單朝九晚五的工作和瑣碎繁冗的家務,...
    金gogo閱讀 381評論 4 3