找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
發表文章前請先閱讀相關版規尊貴會員無限下載附件你準備好成為出色的版主了嗎?
明日花強姦overlord3dsiro母乳kkbox
惡靈古堡堕ち姫ル帶我去地waaa 377凌辱診察找老點對pfes 076

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[簡]被稱為廢物的原英

[繁]身為魔王的我娶了

[繁]從Lv2開始開外掛

[繁]月光下的異世界之

[簡]被稱為廢物的原英

[繁]DATE A LIVE 約會
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3070|回復: 3
打印上一主題下一主題

[問題](已解決)有關程式使用記憶體大小[複製鏈接]

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31719 米
跳轉到指定樓層
樓主
發表於 2017-1-7 01:08 PM|只看該作者|倒序瀏覽
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
本帖最後由 baepi 於 2017-1-10 08:27 PM 編輯

雖然我不確定單一程式是否可以擁有4G的空間~(只是想到32位元定址本來應該就能4G不是嗎?^^)
即便不能~至少應該也要有2G - 1 byte才是....以下是我的理解
單一陣列最大能設定到2147483647~也即是2G-1的byte
假設這限制是給最小單位的char用的~因此理論上應該要能有2G - 1 的空間
因此以下開始測試
...
瀏覽完整內容,請先 註冊登入會員

點評

baepi 感謝大大提供知識~  發表於 2017-1-10 08:35 PM
scottcheng acpi 和 bios/driver 會使用top memory - (need space), 那個區塊是不可用的! 有些可讀有些不可能. 不過這是我16年記憶.. 可能有點錯誤  發表於 2017-1-10 12:15 PM
scottcheng https://msdn.microsoft.com/zh-tw/library/windows/desktop/aa366778(v=vs.85).aspx  發表於 2017-1-10 12:12 PM
分享分享0收藏收藏0支持支持0

使用道具檢舉

inunu 該用戶已被刪除
頭香
發表於 2017-1-9 04:31 AM|只看該作者
大型記憶體不用開
直接用 malloc() 就好
否則你很快會卡在 image 大小的問題上
另外修改程式碼後需要 rebuild, 否則會繼續卡 not a valid win32 application...

底下這個我用 x64 debug 跑 Win7 Enterprise SP1 x64 (16GB RAM) 沒問題
Task manager 會顯示佔用 3.9GB 左右的記憶體

實際使用上要再考慮 fragmentation 問題
建議你還是把記憶體盡量分割成較適當的大小再進行管理
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31719 米
3
發表於 2017-1-9 10:39 PM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
感謝大大幫我做我沒做好的測試...看來當初我測試 x64 時 並未把固定array設小就胡亂添加動態記憶體...還好意思說自己都做過多方測試了( 汗顏 )
經過大大的點醒~果然 x64就沒4G這天花板了...再次感謝大大的大力測試
  1. #define SIZE 15 * 4096 * 4096

  2. double *t1 = NULL , *t2 = NULL , *t3 = NULL , *t4 = NULL , *t5 = NULL ;

  3. void QQ()
  4. {
  5.         cout << "記憶體不足\n";
  6.         abort();
  7. }

  8. void main()
  9. {
  10.         set_new_handler( QQ );

  11.         t1 = new double[ SIZE ];
  12.         if( t1 == NULL )
  13.         {
  14.                 cout << "FQ 1\n";
  15.                 return ;
  16.         }

  17.         t2 = new double[ SIZE ];
  18.         if( t2 == NULL )
  19.         {
  20.                 cout << "FQ 2\n";
  21.                 return ;
  22.         }

  23.         t3 = new double[ SIZE ];
  24.         if( t3 == NULL )
  25.         {
  26.                 cout << "FQ 3\n";
  27.                 return ;
  28.         }

  29.         t4 = new double[ SIZE ];
  30.         if( t4 == NULL )
  31.         {
  32.                 cout << "FQ 4\n";
  33.                 return ;
  34.         }

  35.         t5 = new double[ SIZE ];
  36.         if( t5 == NULL )
  37.         {
  38.                 cout << "FQ 5\n";
  39.                 return ;
  40.         }

  41.         cout<<"YOOOO\n";
  42.         int aa;
  43.         cin >> aa ;

  44.         delete [] t1 ;
  45.         delete [] t2 ;
  46.         delete [] t3 ;
  47.         delete [] t4 ;
  48.         delete [] t5 ;

  49.         cin >> aa ;
  50. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

CoNsTaRwU 該用戶已被刪除
4
發表於 2017-1-10 07:38 PM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
在作業系統層,記憶體被分成至少 heap 和 stack 兩種
你的陣列用的是 stack,stack 的大小是有限制的 (所以才會有 stack overflow 這種東西呀 XDD
你可以藉由更改 linker 的設定來更改預設 stack 的大小

補充內容 (2017-1-10 07:40 PM):
不知道我講的和你的問題有沒有關係...?

點評

baepi 大大前半段跟我猜想 + 理解的相同...後面的我就不知道原來還可以設定了(雖然也可以理解)...只是動態記憶體能解決就算通關了^^  發表於 2017-1-10 08:30 PM
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部