fluent入口速度分布:C的问题,高手进来

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 16:48:28
void Fun()
{
char buffer[16*1024];
char* pbuffer = new BYTE[16*1024];
..
}
两种申请缓存的方法各有什么优点和缺点?

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); //随机值
}

}

C不支持new,C++支持new
使用new可以实现内存回收,用完之后就delete掉。

第一种方法简单(这应该不算一个优点吧)
第二种方法灵活,而且16K内存说多不多,说少不少。使用第二种方法更适合编写高质量高标准的软件。

第一种申请的内存空间有作用域,所以可以在结束的时候由系统给你释放,但是在运行时就固定了大小了,不能更改.
第二种申请的空间没有作用域,需要用delete手工释放,如果没有释放就会造成内存泄漏,但是在运行时能随时按所需要的数值申请内存空间.