删除指针的时间

Bar*_*ist 5 c++ pointers memory-management

喜社区,

我有一个关于删除指针的小问题.

我正在使用Dimension 1024x1024的指针指针矩阵.由于我是动态创建的,因此我在程序结束时删除了为它们分配的空间.但是在通常的循环中执行此操作会花费相当多的时间 - 我使用处理器的时钟速率测量了大约2秒.当程序运行仅15秒时,2秒是巨大的 - 加上:使用这些分配的指针的函数被调用超过一次....

以下是测量的时间关键代码,包括测量:

time=clock();
for(i=0;i<xSize;i++){            //xSize is dynamic, but 1024 for the measurement
    delete [] inDaten[i];
    delete [] inDaten2[i];
    delete [] copy[i];
}
delete inDaten; delete inDaten2; delete copy;
time=clock()-time;
     time/=CLOCKS_PER_SEC;
Run Code Online (Sandbox Code Playgroud)

删除指针总是那么长吗?或者我只是以错误的方式做事?

我希望有人可以帮助我解决这个问题.由于我正在优化一个非常复杂的程序以便更快地运行,因此我无法使用这些2秒的代码.与所有其他部分相比,它的速度太慢了.但我仍然需要能够动态地实现这个代码.SmartPointers可能会有所帮助,但如果我理解正确,他们也需要时间来删除自己 - 只是在不同的时间......

谢谢你的回答!

Baradrist

编辑:我刚刚发现,测量这些删除计算非常慢,因为我没有在发布模式下编译它.由于调试器发挥作用,我测量了这些(最终不真实的)数字让我头疼.最终程序自动优化,以便几乎没有时间参与删除.

无论如何:感谢所有有用的答案!他们给了我很多额外的知识和想法的东西!!!!

sha*_*oth 3

delete[]还将为数组的每个元素调用析构函数,这会增加时间,除非析构函数很简单。

除此之外 - 是的,动态内存分配的成本相对较高。如果您无法忍受 - 尝试分配较少的较大大小的块,或者在时间关键的内容中不进行动态分配。

智能指针不会有太大帮助——它们会在内部进行相同的释放。它们不是为了加速,而是为了设计方便。