亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下兩種申請緩存的方法各有什么優點和缺點?

如下兩種申請緩存的方法各有什么優點和缺點?

C++ C
呼喚遠方 2022-05-24 19:15:10
void Fun(){char buffer[16*1024];char* pbuffer = new BYTE[16*1024];..}
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

C不支持new/delete,C++支持new/delete
c中可用malloc和free
說明:
1。char buffer[16*1024];
可以理解為函數Fun()被調用后創建了一小塊內存,是局部變量,在堆棧中分配地址。函數結束就銷毀。
2。char* pbuffer = new BYTE[16*1024];
重點是它在堆中分配地址。相當于你申請了一段全局變量的內存塊,只要把地址指針傳出本函數,別人也可調用。
而第一種方法是函數結束就銷毀,指針傳出去也沒有用,別人也用不了。

建議使用堆棧分配局域變量,用堆分配大塊內存或者動態創建對象。
測試如下:VC++6.0
char *ppp = NULL;
void CAaaaaDlg::OnButton1()
{
// TODO: Add your control notification handler code here

char* pbuffer = new char[16];

for (int i = 0; i < 16; i++)
{
*(pbuffer + i) = 'A' + i;
}
ppp = pbuffer;
}

void CAaaaaDlg::OnButton2()
{
// TODO: Add your control notification handler code here
char a[16];

for (int i = 0; i < 16; i++)
{
a[i] = *(ppp + i); //正確
}

free(ppp);
for (i = 0; i < 16; i++)
{
a[i] = *(ppp + i); //隨機值
}

}



查看完整回答
反對 回復 2022-05-30
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

C不支持new,C++支持new
使用new可以實現內存回收,用完之后就delete掉。
第一種方法簡單(這應該不算一個優點吧)
第二種方法靈活,而且16K內存說多不多,說少不少。使用第二種方法更適合編寫高質量高標準的軟件。

查看完整回答
反對 回復 2022-05-30
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

第一種申請的內存空間有作用域,所以可以在結束的時候由系統給你釋放,但是在運行時就固定了大小了,不能更改.
第二種申請的空間沒有作用域,需要用delete手工釋放,如果沒有釋放就會造成內存泄漏,但是在運行時能隨時按所需要的數值申請內存空間.

查看完整回答
反對 回復 2022-05-30
  • 3 回答
  • 0 關注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號