看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2012 問題(Question): 大型陣列應用 附上程式: http://ideone.com/h6Vsjt 一開始產生拉丁方陣,都會先用malloc,先產生一個二為陣列出來 再把值給套進去,小數量是可以執行的,可是超過10000*10000 記憶體就會爆掉 假設陣列 1 1 1 1 1 .. 1 2 2 1 1 .. 1 1 1 2 2 .. . . . 之後小魯想到用一維陣列 之後 在free row的值可以應用到 可是column的數值不知道如何取 跪求版上神人 為小魯解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.93.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430407831.A.5B5.html ※ 編輯: hao1130 (1.162.93.137), 05/01/2015 00:24:45
LPH66: 你輸入 size = 10000, 往上會取到 n = 16384 05/01 00:44
LPH66: size * n 的 int 陣列會吃掉 625M, 這用的有一點凶 05/01 00:46
LPH66: 用一維直接寫不是不行, 你要思考你的計算順序跟列印順序 05/01 00:47
LPH66: 說不定不止可以拿掉一維 05/01 00:48
我是實驗需要跑大量模組,輸入值需要到100000,每個ROW計算出一個COST,再經由 COLUMN判斷,目前ROW已經想到怎麼應用,不過COLUMN目前沒有想到要怎應用到QAQ
Killercat: 如果不見得每個column都會需要 那可以考慮lazy eval 05/01 00:53
Killercat: 以及proxy class來避免真的new出那麼多不必要的空洞 05/01 00:55
Killercat: 另外int其實以大陣列來講 實在也是太巨大了點 05/01 00:56
Killercat: 在ia64裡面 int基本上跟long是一樣長的 請改用short 05/01 00:57
Killercat: 甚至char(bool就免了 沒啥幫助的) 05/01 00:57
Killercat: 真的在不行 就自己實作一個DAO來自己土炮存取方式 05/01 00:58
Killercat: 幾乎所有的big number lib都是這樣做的 05/01 00:59
※ 編輯: hao1130 (1.162.93.137), 05/01/2015 10:19:51
EdisonX: 你的方陣裡存的不是 1 就是 2 兩種狀態 , 所以其實可以用 05/01 12:52
EdisonX: bitwise 方式做法 , 甚至它跑出來的結果都是呈現區塊狀, 05/01 12:53
EdisonX: 要設計特殊的資料結構去省空間應該是有機會的。 05/01 12:53
EdisonX: 不過... 怎麼這拉丁方陣和我在 wiki 查的不一樣 @@ 05/01 13:22
EdisonX: 算了一下 , 這實驗數值 100,000 應該是之前有人算過的 05/01 13:39
EdisonX: 用 vector< bitset<100000> > 大小約 1.53~1.55 G 左右 05/01 13:40
EdisonX: 在 32bits OS 下應是剛好用 . 05/01 13:41