结构数组占用太多内存

丹妮111111

我正在开发一个使用2D结构数组存储地图图块属性的简单游戏。

该结构的定义如下:

    typedef struct
    {
        //PRE-GENERATED PROPERTIES

            //Tile Type
            int TypeB;
            int TypeF;
            int TypeW;

            //Tile Roughness
            int RougB;
            int RougF;
            int RougW;

        //GENERATED PROPERTES

            //Boundary Type
            int BounB;
            int BounF;
            int BounW;
            //Boundary Rotation
            int BounRotB;
            int BounRotF;
            int BounRotW;
            //Boundary Flip
            int BounFlpB;
            int BounFlpF;
            int BounFlpW;

            //Movement Properties
            int Movement;
            int Movement_Speed;

        //RANDOMIZED PROPERTIES

            //Randomized Texture Fill
            int RandB;
            int RandF;
            int RandW;
            //Randomized Texture Rotation
            int RandRotB;
            int RandRotF;
            int RandRotW;
            //Randomized Texture Flip
            int RandFlpB;
            int RandFlpF;
            int RandFlpW;

            //Perlin (Temp)
            double PerlinSum;

    } MapData;

MapData **MapTile;

然后使用以下函数创建并运行该数组:

//Create Map Matrix
void CreateMapMatrix(MapData ***Map, int xSize, int ySize)
{
    //Variables
    int i;

    //Allocate Map Memory
    *Map = calloc(xSize, sizeof(MapData));

    for(i = 0; i < xSize; i++)
    {
        (*Map)[i] = calloc(ySize, sizeof(MapData));
    }

}

int = xMap = 2000, yMap = 2000;

CreateMapMatrix(&MapTile,xMap,yMap);

我的问题是,与我期望的相比,此功能运行期间和运行之后使用的内存过高(我假设它是与数组关联的内存)。

假设每个结构占用68个字节(我知道这会更多),我期望对应数组大小的以下内存值。我将观察到的实际内存分配放在一边:

  1. 500x500-预计15.5 Mb-实际26.8 Mb
  2. 1000x1000-预计62 Mb-实际124 Mb
  3. 2000x2000-预计288 Mb-实际435.8 Mb

通过在上述功能之前和之后检查程序的内存使用情况,可以发现观察到的内存分配。

因此,我想我的问题是这种内存差异是否在意料之中,还是我是否已经搞砸了。

与往常一样,任何帮助都将不胜感激!

保罗·奥吉维
*Map = calloc(xSize, sizeof(MapData));

应该:

*Map = calloc(xSize, sizeof(MapData *));

您分配了过多的内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章