[問題] 程式可用的記憶體容量

看板C_and_CPP (C/C++)作者 (tim845487)時間15年前 (2011/03/14 21:16), 編輯推噓8(8016)
留言24則, 14人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 老師說我的程式寫錯 不可能存不到幾十萬個double 經過測試 我連下面這麼少的資料:270000個double都會當掉 最多存到25萬個double左右 這是怎麼回事? 餵入的資料(Input): #include <cstdlib> #include <iostream> int main() { double M[270000]; int i; for(i=0;i<270000;i++) {M[i]=1;} for(i=0;i<100;i++) {printf("%f",M[i]);} system("PAUSE"); return 0; } 預期的正確結果(Expected Output): 印出很多個1 錯誤結果(Wrong Output): 一跑就當掉 用除錯/監看的"執行到游標位置" 顯示問題是:segmentation fault 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.101.199

03/14 21:18, , 1F
當掉只能重修了
03/14 21:18, 1F

03/14 21:19, , 2F
270000*8/1024=2109MB 破了使用者記憶體空間
03/14 21:19, 2F

03/14 21:23, , 3F
上面當沒看到,算錯了XD 2109KB才對
03/14 21:23, 3F

03/14 21:24, , 4F
應該也足夠超出stack了,把stack加大就不會被當掉了
03/14 21:24, 4F

03/14 21:36, , 5F
對了,老師沒教malloc嗎
03/14 21:36, 5F

03/14 21:41, , 6F
沒有stdio就用printf?應該編譯不了吧?
03/14 21:41, 6F

03/14 21:43, , 7F
用 malloc 方式配置應可過
03/14 21:43, 7F

03/14 21:53, , 8F
直接放在全域比較簡單吧
03/14 21:53, 8F

03/14 21:58, , 9F
112 「老師說」。 您是資工系的學生?
03/14 21:58, 9F

03/14 21:59, , 10F
我測試這篇的程式,(我)不會當掉耶.不會顯示segmentation
03/14 21:59, 10F

03/14 22:02, , 11F
fault。 (我)很順利的「跑」。印出很多個1.00......
03/14 22:02, 11F

03/14 22:12, , 12F
這可能要看電腦本身的記憶體狀況,我用我的電腦跑也會當。
03/14 22:12, 12F

03/14 22:14, , 13F
global/static應該問題很大吧... 執行檔可能會超肥...
03/14 22:14, 13F

03/14 22:14, , 14F
不過當掉真的就只能重修了... (拍)
03/14 22:14, 14F

03/14 22:15, , 15F
printf("%f",M[i]);
03/14 22:15, 15F

03/14 22:40, , 16F
對linker下手。
03/14 22:40, 16F

03/15 01:07, , 17F
如果 global variable 是 uninitialized 的話,我認為
03/15 01:07, 17F

03/15 01:08, , 18F
不會增加執行檔大小吧
03/15 01:08, 18F

03/15 01:48, , 19F
如果沒有什麼特殊要求的話,開在global就行了
03/15 01:48, 19F

03/15 02:05, , 20F
我記得置底文有講到這個,可以參考看看
03/15 02:05, 20F

03/15 02:28, , 21F
印象中有時候在local variable宣告較大的陣列會seg fault
03/15 02:28, 21F

03/15 02:29, , 22F
建議宣告在global,或是換個開發環境試試看
03/15 02:29, 22F

03/15 12:26, , 23F
放在global吧
03/15 12:26, 23F

03/17 06:10, , 24F
yeah, local 動態宣告沒問題, 靜態宣告太大會爆掉
03/17 06:10, 24F
文章代碼(AID): #1DVXKRq- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DVXKRq- (C_and_CPP)