簡體   English   中英

C++ - 連續 memory 和多態性

[英]C++ - contiguous memory and polymorphism

我有一個名為GameObject的基類,其他類從中派生。 我想知道通過在連續的 memory 中分配GameObjects對象的所有派生類來處理 memory 分配是否會提高性能。

我將在每個游戲引擎框架中迭代所有這些。

我的問題是,在這種情況下,連續的 memory 存儲是否比沒有連續的 mallocing memory 給我更快的迭代時間? 在這兩種情況下,我都必須保留指向游戲對象的指針向量,因為它們的大小會有所不同。

在連續 memory 中迭代對象可能效果更好,因為緩存和位置。 但是,我建議您構建這兩個系統並實際分析它們。 祝你好運!

我不確定我是否理解這個問題。 您是在問將所有對象預先分配到 memory 的一個巨大塊中並將指向其子部分的指針存儲在 memory 中是否更好? 如果是這樣,請不要那樣做。

因為系統必須請求連續的 memory 更大的塊而不是不連續的更小的塊,而不是更快,你更有可能放慢速度。 請記住塊分配、分頁等。您可能會請求 100 兆字節的連續 memory,但它實際上並不連續。 其中一堆在磁盤中,無論如何一切都被分解成頁面。

然后你會面臨這樣的問題:你是將所有游戲對象分配到一個 go 中以獲得連續的 memory 還是按需創建它們? 您真的要為這一小優化預分配嗎? 如果您需要創建一個新的 object 而您的連續 memory 塊不夠大,會發生什么情況? 等等

真的,我只是在這里集思廣益潛在的問題。 就像其他評論所說的那樣,這是一個過早優化的案例。

現在,如果您將所有指針存儲在一個連續的數組中而不是一個根據其當前大小增長和復制的向量中,那肯定會更快,但即便如此,除非您絕對知道游戲對象的數量,否則最好只分配一個足夠大的向量,以便它只增長一次或兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM