float a[10000];for(i=0;i<10000;i++){a[i]=rand()%1000;}[]內的數字作多只能到10000嗎如果我要100000筆資料請問要怎麼作?
2006-07-27 17:14:31 · 3 個解答 · 發問者 Anonymous in 電腦與網際網路 ➔ 程式設計
直接宣告成 float a[100000];[]內的數字原則上沒有限定, 在我電腦上的最大宣告陣列堆疊是536870895, 超過編譯不會成功如果要比這更大, 我想要就要用動態記憶體配置的方式, 也就是類似這樣宣告:float *a=new [N] float;這時候, N 就是你希望的記憶體數量, 使用這個方式, 如果你的 RAM 夠大, 你就可以要到比較多的記憶體, 反之則不行, 如果要不到, 這時候 a 的值會是 0, 你可以根據 a 是不是等於零來判斷記憶體有沒有要到
2006-07-27 17:43:56 · answer #1 · answered by Rody 5 · 0⤊ 0⤋
其實你的電腦是否可以執行上述你所說之資料量,全端看你的RAM大小來決定,你可以查查看Window管理員裡的效能中的實體記憶體中的可用記憶體有多少,再來決定你能勳告的資料量,其實32位元的CPU只可以定址到4GB,但2~4GB是給OS(Kernal Mode)用的,所以我們無法動它(除非你會寫WDM),對於在UserMode的AP宣告動態記憶體最大只能在2G以下(0~2GB),也就是說既使你的RAM slot插滿了RAM,你的AP可以宣告最大的記憶體也只能大到2GB,所以只要你宣告ㄧ個矩陣為
int A[1000000000];
int A[10000][100000];
或 int *A=new[100000][100000];
編譯時會給過,但執行時鐵會出現錯誤訊息!!!!!況你的記憶體可能不會插到4GB,不過Win2000 prefessional與WinXp有可以支援你AP使用到3G的辦法,不過你要自己更改boot.ini檔才行,還有你的編譯器內部也要設定(VC或BCB),以下是資料,你可以參考看看
http://msdn.microsoft.com/library/default.aspurl=/library/enus/memory/base/4gt_ram_tuning.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memory_limits_for_windows_releases.asp
2006-07-28 04:30:06 · answer #2 · answered by ? 1 · 0⤊ 0⤋
你可以用二維矩陣變成100000:
a[100][1000]-->100000。
n*m=100000,n>1,m>1。
2006-07-27 17:25:13 · answer #3 · answered by Almond 6 · 0⤊ 0⤋