[問題] new operator < 4Gb ?

看板C_and_CPP (C/C++)作者 (人生的轉捩點)時間16年前 (2010/01/25 14:16), 編輯推噓2(2019)
留言21則, 6人參與, 最新討論串1/1
我想要宣告一塊大於4G的記憶體 (作業系統是64bit) 我發現new的似乎有 2G or 4G 的限制 改用 malloc 就可以正常取得記憶體 可是這樣就沒辦法 call constructor 不知道是否有解決方法呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.101.114

01/25 14:19, , 1F
new 有限制嗎?有沒有出現錯誤訊息之類的?
01/25 14:19, 1F

01/25 14:25, , 2F
把作業系統 compiler版本 或著是libstdc++的版本列出吧
01/25 14:25, 2F

01/25 14:28, , 3F
我在 64bit linux 一次配過 16G 沒有問題
01/25 14:28, 3F

01/25 14:29, , 4F
注意你傳進 new 裡面的型別,int 無法表示大於 2G 的數
01/25 14:29, 4F

01/25 14:40, , 5F
gcc version 4.1.2 20080704, icpc 11.1 這兩個都失敗
01/25 14:40, 5F

01/25 14:40, , 6F
在 Linux64 和 win7 64 也都沒辦法啊?
01/25 14:40, 6F

01/25 14:41, , 7F
有些是在compile的時候說array太大 有些是在runtime出現
01/25 14:41, 7F

01/25 14:41, , 8F
std::bad_alloc
01/25 14:41, 8F

01/25 14:54, , 9F
發現問題了.... 直接給值 他就說太大 如果給變數
01/25 14:54, 9F

01/25 14:54, , 10F
他就可以接受 @@"
01/25 14:54, 10F

01/25 14:55, , 11F
我還特別寫成 [(unsigned long) 2,000,000,000 ] 也不行
01/25 14:55, 11F

01/25 15:06, , 12F
會不會編譯時期就配置了, 變成區域變數? 0.0
01/25 15:06, 12F

01/25 15:07, , 13F
就算寫成 [1<<10][1<<10][1<<11] 也不行..
01/25 15:07, 13F

01/25 15:08, , 14F
一樣在compile的時候說 array is too large
01/25 15:08, 14F

01/25 15:11, , 15F
這樣應該也是編譯時期配置吧
01/25 15:11, 15F

01/25 15:18, , 16F
那要如何才能夠解決呢? 謝謝
01/25 15:18, 16F

01/25 15:19, , 17F
你要多維的就用動態的去配置吧, 區域變數存在stack裡
01/25 15:19, 17F

01/25 15:19, , 18F
有的編譯器會限制stack大小
01/25 15:19, 18F

01/25 15:19, , 19F
這種超過4bytes的整數常數不是在數字後面加LL或ULL嗎??
01/25 15:19, 19F

01/25 15:22, , 20F
樓上是對的 是我耍笨了 不過即使如此 還是不能宣告 ><
01/25 15:22, 20F

01/25 15:28, , 21F
= =真難搞
01/25 15:28, 21F
文章代碼(AID): #1BNJT6fg (C_and_CPP)
文章代碼(AID): #1BNJT6fg (C_and_CPP)