[問題] variable bytes size limit

看板C_and_CPP (C/C++)作者 (卡拉歐科史達)時間13年前 (2013/06/08 20:08), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual Studio 2012 問題(Question): 大家好, 我有一個程式, 其中有用 std::set<pair<vector<int>, double>> 來存資料 在跑某些測資的時候, 程式都沒問題, 但跑有些測資, 程式會無預期中止且沒有error message 之前也會遇到這種情況, 但是是程式本身吃的memory太多, ex: 2G 但這次用工作管理員看, 程式都沒到達memory上限 後來檢查覺得有可能是不是 container 的到達上限, 程式直接停止 有問題的測資, 中止時set的size大概是8m多筆, 而且還沒有insert完 用 std::set::max_size() 看, 上限是10m, 不過是不是因為此 set 存放的 bytes 大小已達到上限, 所以才會造成類似程式memory吃到上限直接中止的狀況? 還是有什麼辦法知道我程式中止的原因是因為上述情況? 謝謝! 補充說明(Supplement): 或是有辦法得知程式中止前此 set 佔的 bytes 大小嗎? 類似 sizeof(set_name) ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.216 ※ 編輯: karaokstar 來自: 140.112.28.216 (06/08 20:35)

06/08 20:40, , 1F
可能是memory fragmentation?
06/08 20:40, 1F

06/08 20:41, , 2F
就是記憶體總量還夠,可是太細碎拿不出你要的大小
06/08 20:41, 2F

06/08 20:42, , 3F
你可能需要自己的allocator
06/08 20:42, 3F
不好意思, 我不太懂所謂 allocator 的意思 是自己分配 set 要存多少大小嗎? 有點像 new 的概念? 謝謝! ※ 編輯: karaokstar 來自: 140.112.28.216 (06/10 12:36) typedef pair<vector<int>, double> PAIR; 我後來想說如果改成用 vector< PAIR > 來存 然後 vector.reserve() 是否可以達到一樣的效果? 但是我在 reserve(max_size()) 時, 他不給我reserve, 我想說vector是連續空間 應該比較沒有fragmentation的問題? 如果沒有reserve, 直接用vector.pushback() 存, 是存到 11958657 個之後程式就會停止 除了自己寫allocator之外有其他方法嗎? 謝謝 ※ 編輯: karaokstar 來自: 140.112.28.216 (06/10 17:25)
文章代碼(AID): #1HinxJ4W (C_and_CPP)
文章代碼(AID): #1HinxJ4W (C_and_CPP)