为了账号安全,请及时绑定邮箱和手机立即绑定

如下两种申请缓存的方法各有什么优点和缺点?

如下两种申请缓存的方法各有什么优点和缺点?

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 关注
  • 294 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号