C++析构函数的奇怪行为

Vil*_*lx- 5 c++ debugging destructor visual-studio-2008

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector< vector<int> > dp(50000, vector<int>(4, -1));
    cout << dp.size();
}
Run Code Online (Sandbox Code Playgroud)

只需从命令行运行,这个小程序只需要一秒钟即可执行.但是在调试器中运行时,需要8秒钟.暂停调试器会发现它正在摧毁所有这些向量.WTF?

注 - Visual Studio 2008 SP1,Core 2 Duo 6700 CPU,带2GB RAM.

补充:澄清一下,不,我不会混淆Debug和Release版本.这些结果是在同一个.exe上,甚至没有任何重新编译.事实上,在Debug和Release版本之间切换没有任何改变.

Ian*_*n G 18

在调试器中运行会将内存分配库更改为执行更多检查的内存分配库.除了内存分配和解除分配之外什么都不做的程序将比"正常"程序遭受更多的痛苦.

编辑 刚刚尝试在VS下运行程序我得到一个看起来像的调用堆栈

ntdll.dll!_RtlpValidateHeapEntry@12()  + 0x117 bytes    
ntdll.dll!_RtlDebugFreeHeap@12()  + 0x97 bytes  
ntdll.dll!_RtlFreeHeapSlowly@12()  + 0x228bf bytes  
ntdll.dll!_RtlFreeHeap@12()  + 0x17646 bytes    
msvcr90d.dll!_free_base(void * pBlock=0x0061f6e8)  Line 109 + 0x13 bytes
msvcr90d.dll!_free_dbg_nolock(void * pUserData=0x0061f708, int nBlockUse=1)
msvcr90d.dll!_free_dbg(void * pUserData=0x0061f708, int nBlockUse=1) 
msvcr90d.dll!operator delete(void * pUserData=0x0061f708)
desc.exe!std::allocator<int>::deallocate(int * _Ptr=0x0061f708, unsigned int __formal=4)
desc.exe!std::vector<int,std::allocator<int> >::_Tidy()  Line 1134  C++
Run Code Online (Sandbox Code Playgroud)

其中显示了ntdll.dll中的调试功能以及正在使用的C运行时.