使用大塊記憶體的設定__程式設計

來源:互聯網
上載者:User
(C++)

如下分配記憶體的代碼:

booleantempTag=true;

do

{

try

{

double *K=NULL;

int nnz;

cout<<"請輸入分配記憶體大小(MB):"<<endl;

cin>>nnz;

nnz=nnz*1024*1024/8;

cout<<"開始為數組分配記憶體..."<<endl;

system("pause");

K =(double *) malloc (sizeof(double)*nnz);

if(K!=NULL){

cout<<"為數組K設定初值..."<<endl;

system("pause");

memset(K,0,sizeof(*K)*nnz);

cout<<"按任意鍵釋放記憶體..."<<endl;

system("pause");

free(K);

}

else{

cout<<"記憶體配置失敗!"<<endl;

}

}

catch (std::bad_alloc)

{

cout<<"記憶體配置失敗,可能是由於記憶體空間不足,請按任意鍵繼續..."<<endl;

}

} while (tempTag);

任意輸入分配的記憶體數目,有時候會分配成功,有時候卻出現記憶體配置失敗。分配失敗主要原因有兩種可能,第一種可能就是系統的可用記憶體不足夠分配,這也是常見的一種情況,通過增加記憶體條或重啟系統,保證有足夠的可用記憶體供分配,如下圖所示:


還有一種情況,是很容易忽視的,特別是對於需要大量記憶體進行計算(大於2G)時,調試時出現類似於“retval = HeapFree……”錯誤,如下圖:

當分配小塊記憶體時,如分配500M時,能正常分配;但是當分配大塊記憶體時,如分配2G記憶體時,就分配失敗,但是系統的可用記憶體足夠(大於2G)。這種情況下,主要是項目屬性設定的問題。需要在項目屬性頁面中設定“配置屬性”——“連結器”——“系統”,設定“啟用大地址”為“是”,如下圖所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.