簡體   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