gpt4 book ai didi

c++ - 删除指针的时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:11 26 4
gpt4 key购买 nike

黑社区,

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

我正在使用维度为 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;

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

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

感谢您的回答!

律师

编辑:我刚刚发现,测量这些删除计算非常慢,因为我没有在 Release模式下编译它。自从调试器开始发挥作用,我测量了这些让我头疼的(最终是不真实的)数字。最终程序会自动优化,因此几乎不需要再花时间进行删除。

无论如何:感谢所有有用的答案!他们让我学到了很多额外的知识和需要思考的事情!!!!

最佳答案

delete[] 还将为数组的每个元素调用析构函数,这会增加时间,除非析构函数是微不足道的。

除此之外 - 是的,动态内存分配相对昂贵。如果您不能容忍它 - 尝试分配较少的较大块,或者在时间关键的东西中不进行动态分配。

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

关于c++ - 删除指针的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com