一个大对象或多个小对象

时间:2017-04-11 12:39:14

标签: c++ arrays c++11

我为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];
};

加载较小的物体在性能方面是否有任何优势? 大多数时候我不需要访问同一个地方的所有列表。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这完全取决于您的内存访问模式。如果您发现自己遍历所有flags,那么所有terrains,然后是所有items,那么所有objects 更频繁而不是迭代单个flags tile terrainsitemsobjectstemplate <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 ... */ }; ...然后第二个布局可能比第一个布局具有更好的性能。

唯一可以确定的方法是剖析。

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

ParentFolderId