2011-04-28 76 views
4

我目前正在爲遊戲引擎編寫一個內存分配系統,我想知道是否有經驗豐富的開發人員可以幫助您瞭解哪些分配器結構是有用的。遊戲引擎的分配器

我知道這聽起來有點令人擔憂的一些人,所以我想我需要證明我的位置一點點。我已閱讀答案herehere(以及博客,它們指向hereherehere)。但是請看,我已經嘗試過「先製作一個遊戲,然後重複使用的代碼就是你的'引擎''的東西,但它並不適合我。我發現我實際上一直陷入那些我一次又一次做的事情中(可能沒有很好地重用我的代碼),並且在任何遊戲中都沒有得到很大的提高。

所以,我決定編寫這些東西,我是重用一遍一遍一次......做一次,把它放在一邊。

我真的發現自己脫離了我的聯盟,所以我買了幾本書。傑森格雷戈裏(GEA)的遊戲引擎架構非常好,順便說一句,但我也有遊戲編碼完成(McShaffry)和編程遊戲AI by Example(Buckland)。 GEA對高性能分配器有一些非常好的想法,並且對我非常感興趣,所以我想我會放棄它。

我編寫了一個基於堆棧的分配器,並且幾乎完成了一個基於池的分配器。兩者都具有內存對齊的能力,並且可以被分配用於不同的內存預算(即,任何分配器可以例如使用「零售」存儲器或「開發」存儲器等)。我發現,就編程技能/興趣水平而言,創建這些組件是一件很有意義的事情。

如果有任何開發人員那裏誰願意建議是有用的任何其他分配結構或經常拿出在遊戲開發我想知道。 ?或者如果有任何開發人員在整個職業生涯中從未使用過其他任何東西?

再次證明我的問題(我幾乎可以聽到人們竊竊私語「只要製作你自己的遊戲,看看你需要什麼結構......」,但是......)遊戲引擎架構對我來說是一個很好的資源,因爲作者願意並且毫不羞恥地說:「嘿,這就是這個行業最大的挑戰。」如果有人能夠做一些'經驗 - 重用'並且說'考慮這個結構',那麼這將爲我節省大量時間寫出整整一堆遊戲並找出有用的東西。

回答

0

嗯,說實話,我一直使用最多的是Pool<T>短期對象和預分配的堆作爲C++默認分配器的替代品。

但再次,發展你需要什麼,當你需要它

+4

這個派對有點遲到,但是在你需要的時候開發自定義分配器對於遊戲引擎來說可能是一個非常昂貴的建議。通常情況下,只有當您接近開發週期的末尾時纔會「需要它」,那時您將不得不重構引擎的重要部分,以便最有效地使用它們。如果您正在開發任何大量物品的實時遊戲,並且正在考慮針對桌面PC平臺以外的其他任何遊戲,那麼從長遠來看,您幾乎肯定會需要它們。 – Gerald 2012-07-14 03:26:10

2

嚴肅地說,編寫遊戲的最大障礙是認爲你需要首先設計各種花哨的庫代碼。大多數遊戲需要這種類型的東西比任何其他類型的應用程序少得多。遊戲幾乎總是處理主要由deverlopers決定的數量非常有限的數據/對象,並且只受到玩家行爲的輕微影響(大規模多人遊戲是該規則唯一可能的例外),因此您甚至可以通過靜態所有數據的陣列,如果你有點瘋狂。

除非你正在爲PlayStation或有破損標準庫中的其他主機的垃圾進行開發,應該別想寫你自己的分配器。這與遊戲開發完全正交,浪費你的時間。這是2011年,而不是1992年,你不是在處理DOS系統和2-4MB的ram,你必須管理你自己的數據緩存和丟棄。讓虛擬內存系統爲您完成工作,並花時間製作遊戲,而不是操作系統的一半。

+1

+100,如果我可以。寫很多可重用的代碼/引擎是很好的(自2002年以來我一直在那裏),但有很多事情比編寫自己的內存分配器更重要... – ggambett 2011-04-28 13:46:34

+1

除非你正在開發一些從1992年開始使用2 -4MB內存這個答案是完全不在基地的 – 2013-10-11 11:12:16

+0

@MartinKällman:你願意詳細說明你爲什麼這麼想嗎? – 2013-10-11 21:23:35