繁体   English   中英

分配给C代码的内存远远少于应该使用的内存

[英]Memory assigned to c code is much less than it is supposed to use

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

我正在研究应该利用500MB RAM空间的DSMC C代码,因为我已经考虑过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;
}

如果你们中有人建议我,发生这种无法预测的错误,那真是太好了...

各种因素都可能导致此行为:

  • 如果这些阵列的某些区域从未被访问过,则相应的内存页将永远不会分配到物理内存中;
  • 您的程序可能不会同时使用所有数组,并且随时可能只需要每个数组的一小部分; 在这种情况下,您的大多数阵列都被交换出物理内存,从而大大减少了其使用量。

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

好吧,这可能是代码中的一些问题,并且您分配的确实少于您的想象。 另外,任务管理器显示的是操作系统当前正在“处理”的内容。 由于各种原因,操作系统可能尚未分配内存。 尝试使用所有内存以查看任务管理器显示的数量是否发生变化。

要真正确定编译器分配了多少内存,请生成一个MAP文件并找到符号( var_name ),然后查看确切分配了多少内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM