首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-22 
哪一种做法效率高些呢?被调用函数:Wt0(intnWidth){double*Temp_Bufnewdouble[nWidth]......delete[]Temp

哪一种做法效率高些呢?
被调用函数:  
    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;
}
[解决办法]
我觉得上面这种做法效率可能比较低,因为恨可能造成很多内存碎片。我觉得最好改为下面这样:
--------------------
都知道动态内存申请效率很低,能少申请当然效率高了。
不过内存碎片就不一定了,除非你用的系统碎片回收算法太差,或者并发,否则象这样用完就释放不应该造成过多内存碎片的。

热点排行