[閒聊] 動態配置記憶體給初值與記憶體使用間的關係..

看板C_and_CPP (C/C++)作者 (有馬)時間16年前 (2010/02/26 11:16), 編輯推噓2(208)
留言10則, 3人參與, 最新討論串1/1
#include <iostream> using namespace std; double *cache; #define N 1000 int main(int argc, char *argv[]) { cache = (double *)malloc(sizeof(double)*N*N); system("PAUSE"); //實:1,284 K 虛:8,132 K for(int i=0; i<N*N; i++) // for(int i=0; i<N*N/2; i++) cache[i]=0; system("PAUSE"); //實:9,116 K 虛:8,132 K 總: 17,248 K(指定cache[0:N*N] 初值) //實:5,204 K 虛:8,132 K 總: 13,336 K(僅指定cache[0:N*N/2] 初值) free(cache); system("PAUSE"); //實:1,296 K 虛:312 K return EXIT_SUCCESS; } 是否意味未給定初值的狀況下比較節省記憶體 ? 若真為如此, 不要一次給初值, 在適當的地方給局部使用的部分初值 可以降低最大記憶體使用的情況? 或者以較小位元變數型態相同維度的變數作為cache標記的方法... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.198.60

02/26 12:24, , 1F
要記憶體時,只有在第一次寫入的時候,OS才跟的配給你
02/26 12:24, 1F

02/26 13:06, , 2F
建議你可以看看OS課本裡working set的觀念..
02/26 13:06, 2F

02/26 13:08, , 3F
比起你總供配置了多少記憶體, 你同一時間內需要碰到多少
02/26 13:08, 3F

02/26 13:08, , 4F
記憶體區塊還比較重要..
02/26 13:08, 4F

02/26 13:11, , 5F
另外,工作管理員看到的記憶體量其實就是working set size
02/26 13:11, 5F

02/26 13:12, , 6F
比如說,你配置了10個page(virtual)但OS只能給你4個(phy)
02/26 13:12, 6F

02/26 13:13, , 7F
若你平時只需要4個,那OS可能會只把那4個放進你的phy-mem
02/26 13:13, 7F

02/26 13:14, , 8F
對你而言其實也沒影響. 但若你常態需要用到6個,那可能就會
02/26 13:14, 8F

02/26 13:14, , 9F
有兩個人一直被換出去
02/26 13:14, 9F

02/26 13:38, , 10F
謝謝andyjy12大和cole945大的說明...
02/26 13:38, 10F
文章代碼(AID): #1BXpqabi (C_and_CPP)
文章代碼(AID): #1BXpqabi (C_and_CPP)