0

在我的应用程序结束时,我只需调用以下命令进行清理。

delete [] array1;
delete [] array2;
delete [] array3;
delete [] array4;
delete [] array5;
delete [] array6;
delete [] array7;
delete [] array8;
delete [] array9;
delete [] array10;
delete [] array11;
delete [] array12;
delete [] array13;

13 个指向堆上数组的指针。在调试模式下它需要一个绝对的时间......比如 3-5 分钟,它实际上应该是瞬时的。是什么赋予了?

更新:我假设我正在删除一个 C 风格的结构数组(即只有基元和指针的结构),但是其中两个数组中有 hash_maps,这需要花费大量时间来清理。

4

3 回答 3

3

如果数组包含带有析构函数的对象,则 delete[] 调用每个析构函数。

如果数组很大,则可能必须先从虚拟内存中换入对象,然后才能调用它们的析构函数。

根据您的配置,delete[] 可能会检查数组的边界区域,以查看您是否进行了任何越界写入。

一般来说,您应该完全忽略调试模式下的执行时间,但我理解为什么您会想知道它需要 3-5 分钟才能释放您的数组。

于 2012-04-07T15:20:17.353 回答
0

有几件事可能会发生。尝试在程序运行缓慢的情况下暂停程序几次,然后查看调试器中堆栈上的内容。

回想一下,无论元素类型是数组的析构函数,都会为每个元素调用一次。

于 2012-04-07T15:14:42.277 回答
0

如果您担心性能,请在分析器中运行您的代码。不谈论分析器就不能谈论性能

于 2012-04-07T17:50:32.070 回答