[問題] 遞迴太大,被系統終止掉?

看板C_and_CPP作者 (如果大海能夠)時間16年前 (2009/10/15 10:26), 編輯推噓5(5018)
留言23則, 5人參與, 最新討論串1/1
為了模擬實驗,希望能把模擬裡所有的case列出,所以選擇了建樹的方式 而我是用遞迴把這個樹建出來,每個節點都有2~3個子節點 我電腦是4GB的記憶體,跑程式時是3GB,前面2GB掉得極快,簡直是每秒掉200~300MB 掉到剩800MB時,吃記憶體的速度變得很緩慢,變成每秒掉20~30MB的速度 然後記憶體剩700MB左右,系統會出現錯誤警告,並且把我的程式終止掉 警告內容是:"0x????????"指令參考的"0x00000010"記憶體。該記憶體不能為written。 我在想,一個正常的失控遞迴應該會把記憶體全吃光 然後系統會通知類似"虛擬記憶體不足"的訊息嗎? 如今,卻是記憶體還有剩,卻出現錯誤被系統終結 請問這是正常的,還是我的程式有BUG存在,導致程式跑到最後垮掉? 又如果是正常的,請問有人可以稍微解釋一下原因嗎? (怎麼沒把記憶體全吃光) 真的萬分感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.22.18.83

10/15 10:27, , 1F
系統機制會不允許吧~ 因為系統也要資源
10/15 10:27, 1F

10/15 10:30, , 2F
再來有可能是系統沒法要到他要的空間 要不要用assert
10/15 10:30, 2F

10/15 10:30, , 3F
檢查一下空間NEW的狀態?
10/15 10:30, 3F

10/15 10:31, , 4F
光你印排列組合不可能把記憶體用完的吧
10/15 10:31, 4F

10/15 10:31, , 5F
問題應該出在你實作的方法
10/15 10:31, 5F

10/15 10:33, , 6F
你的作業系統是?? 32bit XP?? 如果沒改boot.ini, 一般
10/15 10:33, 6F

10/15 10:33, , 7F
使用者AP最多只有2GB定址空間, 用超過2G不就死掉了@_@"
10/15 10:33, 7F

10/15 10:34, , 8F
另外, OS的確不會等你把resource全用光才終止你, 不然
10/15 10:34, 8F

10/15 10:34, , 9F
它自己也沒resource可以運作了XD
10/15 10:34, 9F

10/15 10:36, , 10F
原來最多只有2GB可以用@@",我是32bit XP
10/15 10:36, 10F

10/15 10:37, , 11F
所以能用到虛擬記憶體不足的,是因為可用記憶體不到2GB
10/15 10:37, 11F

10/15 10:38, , 12F
這樣也許可解釋為何有時被終止,有時是虛擬記憶體不足
10/15 10:38, 12F

10/15 10:38, , 13F
我的印象是這樣, 因為User可以用的Virtual Address
10/15 10:38, 13F

10/15 10:38, , 14F
剛剛我統計了一下,我的樹在爆掉前,建了1千600萬個node
10/15 10:38, 14F

10/15 10:39, , 15F
Space只有2GB(預設). 至於是不是記憶體不足, 你在動態
10/15 10:39, 15F

10/15 10:39, , 16F
配置後都有確實檢查指標有沒有分配記憶體成功嗎@_@"
10/15 10:39, 16F

10/15 10:40, , 17F
其實小弟也一直很好奇那種可以吃好幾GB mem的軟體, 像
10/15 10:40, 17F

10/15 10:41, , 18F
PhotoShop還是其他影音編輯軟體, 是怎麼用到這麼大的Orz
10/15 10:41, 18F

10/15 10:45, , 19F
我也很好奇,有些軟體可以吃超過2GB的= =
10/15 10:45, 19F

10/15 10:45, , 20F
影音編輯軟體光要把要編的資料放進 memory 就差不多了
10/15 10:45, 20F

10/15 10:46, , 21F
他們多半已經有用很多 tip 改善這類問題了
10/15 10:46, 21F

10/15 11:16, , 22F
我研究一下assert怎麼使用,謝謝各位大大!!
10/15 11:16, 22F

10/16 03:21, , 23F
試試看 屬性->連結器->系統->啟用大型記憶體
10/16 03:21, 23F
文章代碼(AID): #1AreXRMU (C_and_CPP)