分配给c代码的内存远小于它应该使用的内存

时间:2015-03-27 14:05:52

标签: c++ c windows memory multidimensional-array

我是这个论坛的新手......

我正在研究DSMC C代码,该代码应该使用500MB的RAM空间,因为我已经计算了sizeof(double)==8sizeof(int)==4。 然而,当我运行代码时,我的windows8.1的任务管理器显示code.exe文件只使用了172 MB的ram ..为什么会发生这种情况......? 我正在使用10-15个非常长的多维数组,如.. var_name[3][4050000]。 这关系到我,因为我需要的结果也不如预期......

所有变量都在main()之外定义,并定义为静态...

#define MNC 202500
#define MNM 4050000
#define MNSC 16020000
...

static double PP[3][MNM],PV[3][MNM],CG[6][MNC],CT[MNC],CSS[9],CS[7][MNC],FDPCELL[MNC],FDPCELL1[4][4];
static int IR[MNM],ISCG[2][MNSC],IPL[MNM],ISC[MNSC],IC[2][MNC],DPCELL[MNC],DPCELL1[4][4],n;
static double NCOLM,NROW,NSLC,BMEJ;
static double TIME,FTMP,VFX,VFY,VFZ,VMP,TMPJ,FVJ,SELT,X,Y,Z;
...

int main()
{
    ...
    return 0;
}
如果你们中的任何人建议我这样一个不可预测的错误会出现什么问题,那真的很棒......

2 个答案:

答案 0 :(得分:1)

各种各样的事情都可能导致这种行为:

  • 如果从不访问这些数组的某些区域,则永远不会在物理内存中分配相应的内存页;
  • 您的程序可能无法同时使用所有阵列,并且在任何时候都可能只需要每个阵列的一小部分;在这种情况下,大多数阵列都会被物理内存换掉,从而大大降低了它的使用率。

没有看到代码,这些是最可能的原因。

答案 1 :(得分:1)

嗯,这可能是你代码中的一些问题,而且你的分配确实比你想象的要少。此外,任务管理器显示的是操作系统目前正在“处理”的内容。由于各种原因,操作系统可能尚未分配内存。尝试使用所有内存来查看任务管理器显示的金额是否发生变化。

要确定编译器分配了多少内存,请生成MAP文件并查找符号(var_name)并查看完全分配的内容。