作者EdisonX (閉上眼的魚)
看板C_and_CPP
標題Re: [問題] allocate more than 4GB
時間Fri Apr 6 23:56:35 2012
※ 引述《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