gpt4 book ai didi

c - 结构体数组占用内存过多

转载 作者:行者123 更新时间:2023-11-30 19:12:36 26 4
gpt4 key购买 nike

我正在开发一个简单的游戏,它使用 2D 结构数组来存储 map 图 block 属性。

结构体定义如下:

    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 *));

您分配了太多内存。

关于c - 结构体数组占用内存过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com