【发布时间】:2011-03-07 18:44:25
【问题描述】:
嘿社区,
我有一个关于删除指针的小问题。
我正在使用尺寸为 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 秒的代码。与所有其他部分相比,它太慢了。但我仍然需要能够动态地实现这段代码。智能指针可能会有所帮助,但如果我理解正确,它们也需要时间来删除自己 - 只是在不同的时间......
感谢您的回答!
酒吧老板
编辑:我刚刚发现,测量这些删除计算非常慢,因为我没有在发布模式下编译它。自从调试器开始发挥作用后,我测量了这些(最终是虚幻的)数字,这些数字让我很头疼。最终程序会自动优化到足以使删除几乎没有时间。
无论如何:感谢所有有用的答案!他们给了我很多额外的知识和思考的东西!!!!
【问题讨论】:
-
inDaten、inDaten2和copy中的对象是什么类型?它们只是整数或类似的东西,还是真实的对象? -
你需要动态分配一切吗?您需要这么多单独分配吗?是否可以重写程序以将数据存储在更少、更大的分配中?
-
在我的上网本上,删除 double[] 不会到达下一个时钟滴答,所以要么你在运行时附加了调试器,要么在数组中元素的析构函数中发生了一些昂贵的事情.
-
@Pete:据我所知,他正在删除数百万个。
-
@Jalf 我正在运行他给出的 xSize = 1024 的代码,所以它是三个参差不齐的数组,每个数组都包含一百万个双精度数
标签: c++ pointers memory-management