[問題] 實務上array可儲存的元素數(存float為例)

看板C_and_CPP作者 (alen3321)時間8年前 (2016/01/05 23:02), 8年前編輯推噓7(707)
留言14則, 7人參與, 最新討論串1/1
開發平台(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

01/05 23:17, , 1F
沒那麼小吧?? 一個float 64位元的系統算 8byte好了
01/05 23:17, 1F

01/05 23:19, , 2F
20萬 * 8btye 差不多 150幾MB
01/05 23:19, 2F

01/05 23:23, , 3F
不能看總memory OS會為你的process開空間(stack heap那
01/05 23:23, 3F

01/05 23:24, , 4F
些)
01/05 23:24, 4F

01/05 23:37, , 5F
我查了一下 VC++的預設最大stack是1MB 用win32算
01/05 23:37, 5F

01/05 23:38, , 6F
4*50000*4byte=接近800KB 好像還算合理?
01/05 23:38, 6F

01/05 23:38, , 7F
這問題跟東西在哪裡很有關係, 不同地方有不同的限制
01/05 23:38, 7F

01/05 23:53, , 8F
慘了 我算錯了是 1.5MB...
01/05 23:53, 8F

01/06 00:27, , 9F
改用動態宣告吧
01/06 00:27, 9F

01/06 00:37, , 10F
跟虛擬記憶體還有分頁大小有關,跟實體記憶體多大無關
01/06 00:37, 10F

01/06 12:32, , 11F
先說你的array是區域變數還是全域變數
01/06 12:32, 11F
感謝各位大大的建議 其中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

01/06 22:34, , 12F
錯了吧 宣告於global的未初始化變數是放在BSS
01/06 22:34, 12F

01/06 22:35, , 13F
可google "data segment"
01/06 22:35, 13F

05/10 17:42, , 14F
$
05/10 17:42, 14F
文章代碼(AID): #1MYziD_X (C_and_CPP)