[問題] 建立大型矩陣問題?

看板C_and_CPP作者 (小志)時間12年前 (2012/06/29 11:59), 編輯推噓5(5019)
留言24則, 14人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 請問一下各位大大,有辦法建立很大的矩陣嗎? 例如50000*50000的矩陣 我用malloc的方法最多也只能創到26000*26000左右,再大compile就過不了了 但是小弟需要用到更大的矩陣,不知道有沒有甚麼方法可以做到這件事。 謝謝 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.81

06/29 12:10, , 1F
compile就過不了的錯誤訊息是?
06/29 12:10, 1F

06/29 12:10, , 2F
拿記憶體來換吧 五萬乘五萬的int陣列要吃掉 9~10G
06/29 12:10, 2F

06/29 12:11, , 3F
如果真的不行的話想辦法在演算法上減少陣列大小吧
06/29 12:11, 3F

06/29 12:15, , 4F
確定ram夠大的話試著分很多次malloc看看
06/29 12:15, 4F

06/29 12:31, , 5F
於 0x002b3a66 的 222.exe 中發生未處理的例外狀況
06/29 12:31, 5F

06/29 12:31, , 6F
0xC0000005: 寫入位置0x00000000 時發生存取違規
06/29 12:31, 6F

06/29 13:05, , 7F
這是runtime err, 和compile無關吧?
06/29 13:05, 7F

06/29 13:45, , 8F
另外提醒一下...50000x50000 已經超過 int 的上限囉
06/29 13:45, 8F

06/29 13:46, , 9F
所以~ int A[50000*50000] 是會 error 的
06/29 13:46, 9F

06/29 15:07, , 10F
陣列的index不是size_t嗎 @@
06/29 15:07, 10F

06/29 15:07, , 11F
疑? 好像不是? 還是ssize_t? QQ
06/29 15:07, 11F

06/29 16:24, , 12F
是size_t沒錯,64位元下的vc是8 bytes,32位元下4byte
06/29 16:24, 12F

06/29 16:27, , 13F
試著寫入硬碟再讀出來?
06/29 16:27, 13F

06/29 16:50, , 14F
通常要用到那麼大矩陣的話你的演算法應該還有改進空間...
06/29 16:50, 14F

06/29 16:57, , 15F
除了作業系統,還和compiler有關.
06/29 16:57, 15F

06/29 16:58, , 16F
原問題 #1FVkF8Lw 記得看推文. 心得 #1FVn8sL-
06/29 16:58, 16F

06/29 17:23, , 17F
了解!
06/29 17:23, 17F

06/29 17:23, , 18F
(繼續用我的gcc-4.7)
06/29 17:23, 18F

06/30 00:36, , 19F
hichcock: 其實 300*300 就超過 int 保證的上界了
06/30 00:36, 19F

06/30 00:37, , 20F
purincess: 說來話長。你寫 50000 下去的時候就有一個型態
06/30 00:37, 20F

06/30 00:40, , 21F
XDDDD
06/30 00:40, 21F

06/30 13:05, , 22F
請用 sparse matrix
06/30 13:05, 22F

06/30 13:06, , 23F
不然只能用 maping file 的方式了
06/30 13:06, 23F

07/08 18:11, , 24F
忘了感謝各位前輩建議,這個問題我後來自己重寫演算法
07/08 18:11, 24F
文章代碼(AID): #1FxIWF7p (C_and_CPP)
文章代碼(AID): #1FxIWF7p (C_and_CPP)