看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《EdisonX (閉上眼的魚)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : vc2010 : 問題(Question): : malloc 有辦法一次超過 4 GB 嗎? : 我拿下面這段碼去測某台 PC, 結果超過了 4GB, : 但實務上我沒辦法一次 malloc 那麼大 (引數也只是 size_t), : 請問是否有其他方式可處理掉? : 程式碼(Code):(請善用置底文網頁, 記得排版) : #define MB (1024*1024) : size_t mb=0; : while(malloc(MB)) ++mb; : printf("%u (mbs)\n", mb); : 補充說明(Supplement): : 另在這段像在 「 燒機 」的程式碼, release mode 下會被完全忽略, : 不知是否有方式讓它正常運作?謝謝各位。 這問題真的是麻煩,整理一下總結。程式碼如下敘述 #include <stdio.h> #include <string.h> #include <stdint.h> #include <stdlib.h> int main() { size_t MB = (1024*1024); size_t mb = 0; char *p; printf("sizeof size_t = %d\n", sizeof(size_t)); printf("SIZE_MAX = %zu\n", SIZE_MAX); /* (1) */ while(p=malloc(MB)) ++mb, memset(p, 0, MB); /* (2) */ printf("max = %u\n", mb); return 0; } ------- (1) %zu 在 gcc 下可行,vc 下不可行。 ( C99) (2) memset 是避開 vc release opt. 掉 (3) vc 2010 不管有沒有開「最大記憶體支援」,x86 跑到 2g / x64 跑到 4g size_t 都是 4 bytes , 讓我感到最疑惑, 擺明了不能配置超過 4g (4) gcc 4.6.1 x86 size_t 4bytes, 跑到 2G bytes x64 size_t 8bytes, 記憶體 16 Gb 跑到乾。 -- If there is no tomorrow, I want to see u last time. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161
rephansu:編x64的程式就會回報8byte,可以直接用超過4G 04/07 08:32
latw:vc2008沒問題, 吃到16G就不吃了(我有20G可以給他吃 ㄎㄎ) 04/07 08:33
latw:vc2010 不能用express版本..不支援x64..至少要用專業版以上 04/07 08:34
rephansu:x86的話,要用超過4G需要操作AWE API 04/07 08:34
rephansu:我只有8G,跑到6G就變得很慢,沒辦法操作系統&中斷程式 04/07 08:37
EdisonX:耶..我vc2010確實是pro.版以上.小聲問.vs這套軟體本身有在 04/07 17:21
EdisonX:分 x64 / x86 版本的嗎? 謝謝 ^^ 04/07 17:22
EdisonX:另外,謝謝 rephansu 給的 keyword. 04/07 17:22
purpose:IDE 主程式本身是 32 位元,cl.exe 分別有 32/64 版本 04/07 19:00
purpose:看了目錄名稱,還有分 amd64 跟 ia64 的樣子 04/07 19:01
EdisonX:感謝 p 大。 04/07 19:21