一个大物体或多个小物体

One big object or multiple small ones

本文关键字:小物体 一个 大物      更新时间:2023-10-16

我为一款Roguelike类型的游戏创建了一个地图系统,我问我,对于瓷砖来说,最好有一个存储物品、地形的大物体......或者我将它们分开在多个对象中。

一个例子更容易理解:

一个大类:

class Tile {
    unsigned char flags;
    Terrain *terrain;
    std::vector<Item> items;
    std::vector<Object> objects;
};
class Map {
    Tile tiles[100][100];
};

或多个小的:

class Map {
    unsigned char flags[100][100];
    Terrain terrains[100][100];
    std::vector<Item> items[100][100];
    std::vector<Object> objects[100][100];
};

加载较小的对象在性能方面有什么优势吗?大多数时候,我不需要访问同一位置的所有列表。感谢您的帮助。

这完全取决于您的内存访问模式。如果您发现自己遍历所有flags,然后是所有terrains,然后是所有items,然后是所有objects比遍历单个磁贴的flagsterrainsitemsobjects频繁......那么第二个布局可能比第一个布局具有更好的性能。

确定的唯一方法是剖析。


此外,您可以使用策略抽象内存布局,以便在测试/分析中轻松更改它:

template <typename Storage>
class Map
{
    Storage _storage;
    auto& getFlags(int x, int y);
    auto& getTerrains(int x, int y);
    auto& getItems(int x, int y);
    auto& getObjects(int x, int y);
};
struct TileStorage   { /* ... approach 1 ... */ };
struct JaggedStorage { /* ... approach 2 ... */ };
相关文章: