读书人

哪一种做法效率高些呢?该怎么解决

发布时间: 2012-02-22 19:36:55 作者: rapoo

哪一种做法效率高些呢?
被调用函数:
Wt0(int nWidth)
{
double *Temp_Buf = new double[nWidth];
......
delete []Temp_Buf;
}


调用函数:
int nHeight = 1000;
int nWidth = 1000;
for(int i=0;i <nHeight;i++)
Wt0(nWidth);

我觉得上面这种做法效率可能比较低,因为恨可能造成很多内存碎片。我觉得最好改为下面这样:
被调用函数:
Wt0(int nWidth,double *Temp_Buf)
{
......
}


调用函数:
int nHeight = 1000;
int nWidth = 1000;
double *Temp_Buf = new double[nWidth];
for(int i=0;i <nHeight;i++)
Wt0(nWidth,Temp_Buf);
......
delete []Temp_Buf;

[解决办法]
单从效率上来看,你的做法会高很多的。
[解决办法]
那为什么不把for循环也移入Wt0?
[解决办法]
后者,反复new没必要撒
[解决办法]
By called:

Wt0(double* pdbl)
{
//double *Temp_Buf = new double[nWidth];

operation with pdbl pointer

//delete []Temp_Buf;
}


call:
int nHeight = 1000;
int nWidth = 1000;
for(int i=0;i <nHeight;i++) {
double *Temp_Buf = new double[nWidth];
Wt0(nWidth);
delete []Temp_Buf;
}
[解决办法]
我觉得上面这种做法效率可能比较低,因为恨可能造成很多内存碎片。我觉得最好改为下面这样:
--------------------
都知道动态内存申请效率很低,能少申请当然效率高了。
不过内存碎片就不一定了,除非你用的系统碎片回收算法太差,或者并发,否则象这样用完就释放不应该造成过多内存碎片的。

读书人网 >C++

热点推荐