[問題] 陣列大小有上限嗎

看板C_and_CPP作者 (我想出去玩啦)時間15年前 (2009/05/05 23:22), 編輯推噓5(5011)
留言16則, 8人參與, 最新討論串1/1
#include<iostream> #include <iomanip> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <string.h> #include <fstream> #include <math.h> using std::cout; using std::endl; using namespace std; double unif(double &seed); double norm(double mean, double var); int main(void) { double mean = 0; double SNR =10.0; double var =1/pow(10 , SNR/10); double w[1000][100]={0}; double err = 0; double total = 10000000; int t[1000][100] = {0}; double r[1000][100] = {0}; for(int j=0 ; j<100 ;j++) { for(int i=0 ; i<1000; i++) { t[i][j] = -1; w[i][j] = norm(mean,var); r[i][j] = t[i][j]+w[i][j]; if(r[i][j]>=0) { err+=1; } } } ofstream fop("re.txt"); fop<<(err/total); cout<<"解碼結束"<<endl; fop.close(); system("pause"); }//////end double unif(double &seed) { double a1=3972.0,a2=4094.0; double m=2147483647.0; double seed1,seed2; seed1 = a1 * seed ; seed2 = a2 * seed ; /* control seed < 10^10 */ seed1 = seed1 - (long)(seed1/m) * m ; seed2 = seed2 - (long)(seed2/m) * m ; seed = seed1 * 100000.0 + seed2; seed = seed - (long)(seed/m)*m; if((seed/m)<0){ return(-1*seed/m);} else return(seed/m); } double norm(double mean, double var) { double sz=0.0,v1,v2,sigma,ans; double seed1,seed2; sigma=sqrt(var); seed1=rand()+clock()*123; v1=unif(seed1); seed2=fabs(clock()*1236*var+rand()-seed1); v2=unif(seed2); sz=cos(2.*3.14*v1)*sqrt(-2.*log(v2)); ans=sz*sigma+mean; return(ans); } 我想請教的問題是當我把w[1000][100]裡面的1000改成10000然後其它像 t[][]還有r[][]跟i都改成對應的10000後,程式就出現overflow的訊息 這是因為我設定超過陣列的上限嗎,因為像1000就可以執行但改成 10000就不能,請問板上的高手這是甚麼問題呢,感謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.122.235

05/05 23:25, , 1F
你的RAM不夠大吧
05/05 23:25, 1F

05/05 23:37, , 2F
RAM夠大也一樣, 開發環境允許你要的memory空間也會有限
05/05 23:37, 2F

05/05 23:38, , 3F
制, stack(區域變數等)/heap(動態配置等)的size會受限.
05/05 23:38, 3F

05/05 23:56, , 4F
那請問V大如果我需要做到10000次的話
05/05 23:56, 4F

05/05 23:56, , 5F
那我可以用甚麼方法去做到
05/05 23:56, 5F

05/05 23:57, , 6F
如果用動態記憶體的方式可以嗎
05/05 23:57, 6F

05/06 00:06, , 7F
宣告大矩陣可能要用到allocator,可以參考TCL
05/06 00:06, 7F

05/06 00:09, , 8F
TCL??
05/06 00:09, 8F

05/06 00:10, , 9F
有相關的資料可以參考嗎^^ m大
05/06 00:10, 9F

05/06 00:17, , 10F
用 64bit OS + memory mapped file 吧 :) 可以很大很大
05/06 00:17, 10F

05/06 00:19, , 11F
那如果我用三維陣列呢 這樣會有用嗎
05/06 00:19, 11F

05/06 00:35, , 12F
直接allocate在stack上的話就會受到stack大小限制
05/06 00:35, 12F

05/06 00:35, , 13F
你可以試試看動態配置,heap空間應該大很多
05/06 00:35, 13F

05/06 00:40, , 14F
ok我試看看 感謝
05/06 00:40, 14F

05/06 01:27, , 15F
array都有預設的大小 某個地方有定義 好像可改的樣子
05/06 01:27, 15F

05/06 03:27, , 16F
stack size的問題 用動態配置或把w放在global就可以了
05/06 03:27, 16F
文章代碼(AID): #1A05dFAr (C_and_CPP)