Re: [問題] allocate more than 4GB
※ 引述《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
04/07 08:32, 1F
→
04/07 08:33, , 2F
04/07 08:33, 2F
→
04/07 08:34, , 3F
04/07 08:34, 3F
→
04/07 08:34, , 4F
04/07 08:34, 4F
→
04/07 08:37, , 5F
04/07 08:37, 5F
→
04/07 17:21, , 6F
04/07 17:21, 6F
→
04/07 17:22, , 7F
04/07 17:22, 7F
→
04/07 17:22, , 8F
04/07 17:22, 8F
→
04/07 19:00, , 9F
04/07 19:00, 9F
→
04/07 19:01, , 10F
04/07 19:01, 10F
→
04/07 19:21, , 11F
04/07 19:21, 11F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章