我对C ++很陌生。我发现operator delete比operator new慢得多。 我在MS Visual Studio 2012下运行以下代码,操作系统是Windows 7 64位。
输出结果为:
0 19 ....................
问题已经解决了。这是因为我从IDE运行它。但现在我很好奇为什么从调试器运行它会产生如此大的差异?
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
#define N 10
typedef unsigned long DWORD;
typedef int * PINT;
const DWORD n = 2E6;
time_t time1, time2, time3;
int main()
{
PINT * p = new PINT[n];
cout << "-----------------" << endl;
time (&time1);
for (DWORD i = 0; i < n; i++)
{
p[i] = new int [N];
}
time (&time2);
cout<<time2-time1<<endl;
for (DWORD i = 0; i < n; i++)
{
delete [] p[i];
}
time (&time3);
cout<<time3-time2<<endl;
delete [] p;
cout << "................." << endl;
}
答案 0 :(得分:1)
当您在VS上构建程序作为调试版本时,您获得的堆不同于执行版本构建时的堆。调试堆包含许多安全措施,旨在帮助您查找常见的编程错误。这些技术包括:
这些特殊功能倾向于在free
而不是new
上调用,因此free
速度较慢(至少对我而言)并不令人惊讶。
free
上足够快,可以满足您的任何需求。