Re: [問題] allocate more than 4GB

看板C_and_CPP (C/C++)作者 (閉上眼的魚)時間14年前 (2012/04/06 23:56), 編輯推噓0(0011)
留言11則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/07 08:32, , 1F
編x64的程式就會回報8byte,可以直接用超過4G
04/07 08:32, 1F

04/07 08:33, , 2F
vc2008沒問題, 吃到16G就不吃了(我有20G可以給他吃 ㄎㄎ)
04/07 08:33, 2F

04/07 08:34, , 3F
vc2010 不能用express版本..不支援x64..至少要用專業版以上
04/07 08:34, 3F

04/07 08:34, , 4F
x86的話,要用超過4G需要操作AWE API
04/07 08:34, 4F

04/07 08:37, , 5F
我只有8G,跑到6G就變得很慢,沒辦法操作系統&中斷程式
04/07 08:37, 5F

04/07 17:21, , 6F
耶..我vc2010確實是pro.版以上.小聲問.vs這套軟體本身有在
04/07 17:21, 6F

04/07 17:22, , 7F
分 x64 / x86 版本的嗎? 謝謝 ^^
04/07 17:22, 7F

04/07 17:22, , 8F
另外,謝謝 rephansu 給的 keyword.
04/07 17:22, 8F

04/07 19:00, , 9F
IDE 主程式本身是 32 位元,cl.exe 分別有 32/64 版本
04/07 19:00, 9F

04/07 19:01, , 10F
看了目錄名稱,還有分 amd64 跟 ia64 的樣子
04/07 19:01, 10F

04/07 19:21, , 11F
感謝 p 大。
04/07 19:21, 11F
文章代碼(AID): #1FVn8sL- (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1FVn8sL- (C_and_CPP)