看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): Visual Studio 問題(Question): 請教實務上一台普通PC C array,儲存float的話 大概可以有幾個elements? 小弟我只使用了4個array float ADiag[numX]; float ALeft[numX]; float ARight[numX]; float b[numX]; (其中numX約為50000以前都ok (無論numX代入1,2,3....1000...50000都不會問題), 約50000後程式會當掉... 是否為memory不足? (memory有如此小嗎?只能存約50000*4 = 20萬個float??!!) 先感謝各位大大的回答m(.____.)m -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.49.129 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1452006157.A.FE1.html ※ 編輯: alen332l (114.42.49.129), 01/05/2016 23:11:25
Clangpp: 沒那麼小吧?? 一個float 64位元的系統算 8byte好了 01/05 23:17
Clangpp: 20萬 * 8btye 差不多 150幾MB 01/05 23:19
overhead: 不能看總memory OS會為你的process開空間(stack heap那 01/05 23:23
overhead: 些) 01/05 23:24
overhead: 我查了一下 VC++的預設最大stack是1MB 用win32算 01/05 23:37
overhead: 4*50000*4byte=接近800KB 好像還算合理? 01/05 23:38
LPH66: 這問題跟東西在哪裡很有關係, 不同地方有不同的限制 01/05 23:38
Clangpp: 慘了 我算錯了是 1.5MB... 01/05 23:53
laladeer: 改用動態宣告吧 01/06 00:27
stupid0319: 跟虛擬記憶體還有分頁大小有關,跟實體記憶體多大無關 01/06 00:37
chchwy: 先說你的array是區域變數還是全域變數 01/06 12:32
感謝各位大大的建議 其中chchwy大的建議非常有用 從local改成global就可以run了# ^^^^^^^^ 所以會因為local_array及global_array的不同而有不同的記憶體安排了!? 所以小弟整理原因如下: 「 因為main()函數宣告的array會從stack擠出 所以很快就會overflow 而宣告於global仍是在stack,但因為預留空間而比較不會有overflow的問題. (因此我array改成global 後就ok了) 最後, 我的例子是靜態宣告,所以不會用到heap. 」 不知道如此理解是否正確,再次感謝m(.__.)m ※ 編輯: alen332l (114.42.49.129), 01/06/2016 21:41:45
overhead: 錯了吧 宣告於global的未初始化變數是放在BSS 01/06 22:34
overhead: 可google "data segment" 01/06 22:35
alen332l: $ 05/10 17:42