视觉C++ 2010 在释放数组指针时速度很慢

Visual C++ 2010 slow at freeing array pointers

本文关键字:速度 指针 数组 C++ 2010 释放 视觉      更新时间:2023-10-16

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

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,需要花费大量时间来清理。

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

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

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

通常,您应该完全忽略调试模式下的执行时间,但我理解为什么您会想知道仅释放数组就需要 3-5 分钟。

有几件事可能会发生。 尝试在程序变慢几次时停止程序,并查看调试器中堆栈上的内容。

回想一下,数组的元素类型的析构函数将为每个元素调用一次。

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