[問題] dll 的 heap memory 上限

看板C_and_CPP (C/C++)作者 (勾炸)時間16年前 (2010/04/21 17:26), 編輯推噓2(2013)
留言15則, 5人參與, 最新討論串1/1
我的C++程式是作成DLL讓JNI去使用(DEV C++) 我的問題是 int* a = new int[1 << 26]; int* b = new int[1 << 26]; 作了a之後,在b會ERROR(RUNTIME ERROR) 如果把其中一個註解掉,就沒有事 如果改成 int* a = (int*)malloc(sizeof(int) << 26); int* b = (int*)malloc(sizeof(int) << 26); a[rand() & 0x3FFFFFF] 不會有問題 b[rand() & 0x3FFFFFF] 會有fatal error 我遇過的fatal error都是超出陣列大小 所以我認為跟原本是一樣的問題(b的malloc沒有成功) 目前我猜測作成DLL的heap memory上限跟一般C程式不一樣 (我知道一般的上限是2G) 請問我這樣猜測是對的嗎 或是是其他的問題呢 @@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.62 ※ 編輯: gozha 來自: 140.122.192.214 (04/21 17:49)

04/21 18:29, , 1F
is rand() smaller than 1 << 26?
04/21 18:29, 1F

04/21 18:31, , 2F
rand() & 0x3FFFFFF 漏了..@@
04/21 18:31, 2F
※ 編輯: gozha 來自: 140.122.192.214 (04/21 18:32)

04/21 18:39, , 3F
用malloc或new的回傳值check是不是NULL沒辦法檢查出
04/21 18:39, 3F

04/21 18:40, , 4F
動態配置失敗的狀況嗎?? 記得應該是可以吧??
04/21 18:40, 4F

04/21 18:40, , 5F
check回來的結果是不是NULL應該就能知道配成功了沒@_@"
04/21 18:40, 5F

04/21 18:41, , 6F
另外, 你的memory space還要考慮process本身的usage,
04/21 18:41, 6F

04/21 18:42, , 7F
2G的Virtual memory address space應該是整個process
04/21 18:42, 7F

04/21 18:42, , 8F
在算, 而不是單看一個.dll的....@_@"
04/21 18:42, 8F

04/21 18:48, , 9F
C++ 的 new 在失敗時會丟出 bad_alloc exception
04/21 18:48, 9F

04/21 19:01, , 10F
感謝樓上各位的意見,我檢查了一次@@ new有丟出bad_alloc
04/21 19:01, 10F

04/21 19:02, , 11F
malloc之後為NULL 我整個程式(包含JAVA與C++的部份)不到2G..
04/21 19:02, 11F

04/21 19:04, , 12F
好怪..~"~
04/21 19:04, 12F

04/22 09:31, , 13F
會不會是int不是 2 byte?
04/22 09:31, 13F

04/22 16:54, , 14F
我int是用4byte去算的 @@
04/22 16:54, 14F

04/23 17:12, , 15F
int是4byte的話 一塊記憶體就1GB new 2塊不夠很正常
04/23 17:12, 15F
文章代碼(AID): #1BpiJYkh (C_and_CPP)
文章代碼(AID): #1BpiJYkh (C_and_CPP)