减少特定数据c的内存足迹

  • 本文关键字:内存 足迹 数据 c memory
  • 更新时间 :
  • 英文 :


我有一个网格,可以将游戏的几何形状分开。该网格中的每个单元格都包含三角形的索引,它可以包含0到n索引。

我原本想到这个结构以持有该数据:

struct GRID_CELL
{
   unsigned short m_num_indexes;
   unsigned int * m_indexes;
}

这是一个记忆力有限的系统,很快我用完了。我需要存储60x60x60网格单元。首先,我想到存储 m_num_indexes 作为 m_indexes 的第一个元素,以减少由于净化而减小结构的大小(从8到4个字节(。

然后我认为我可以使用此结构:

    struct GRID_CELL
    {
       unsigned short m_first_index;
       unsigned short m_num_index;
    }

,然后连续存储所有索引中的所有索引。

您是否可以考虑将这些信息存储在较小的内存足迹中的任何其他方法(也不会使提取信息过于复杂,因为CPU也非常有限,并且必须经常访问此信息(?

谢谢!

我们可以将 GRID_CELL降低到一个字节—一种单元格,即:

struct GRID_CELL
{
    uint8_t m_type;
}
struct GRID_CELL grid[60][60][60];
unsigned int *indexes[256];
unsigned short num_indexes[256];

这意味着我们将仅限于256个独特的单元格,但是对于大多数游戏来说,就足够了。访问索引:

uint8_t cell_type = grid[x][y][z];
unsigned short n = num_indexes[cell_type];
unsigned int *p = indexes[cell_type];

单元格类型的示例:

  • 单元格类型0是一个空单元(空气(;
  • 单元格型1是水;
  • 单元格型2是地球;
  • 单元格类型3是一个障碍;
  • 单元格类型128是空单元中的游戏字符;
  • 细胞类型129是水中的角色;
  • 细胞类型130是地球上的角色;
  • 单元格类型255是一个唯一的单元格(情况变化(;

等等。

我们还可以尝试使用稀疏矩阵来节省一些字节。但这可能会使游戏引擎复杂化。这是Wikipedia上有关稀疏矩阵的一些一般信息。

最新更新