【发布时间】:2015-05-31 21:27:58
【问题描述】:
我是这个论坛的新手...
我正在编写一个 DSMC C 代码,它应该使用 500MB 的 RAM 空间,因为我已经计算了 sizeof(double)==8 和 sizeof(int)==4。
然而,当我运行代码时,我的 windows8.1 的任务管理器只显示 code.exe 文件正在使用 172 MB 的内存。为什么会发生这种情况...?
我正在使用 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;
}
如果你们中的任何人建议我这样一个不可预测的错误可能有什么问题,那就太好了......
【问题讨论】:
-
很多事情都可以在那里发挥作用。没有看到你的代码,很难评论。
-
您是如何准确测量 172MB 的?物理内存页面很可能在首次访问时按需分配,因此进程可能不会分配全部 500MB,除非它全部使用。
-
欢迎来到 SO。请阅读How to Ask。请出示代码。
-
你会初始化每个数组的每一个数组元素吗?
-
任务管理器有多个可用的内存列。我相信默认的显示工作集,即 Windows 选择分配给物理 RAM 的分配内存的一部分。剩余的内存可能还没有初始化,或者可能因为最近没有被使用而被换出。
标签: c++ c windows memory multidimensional-array