64,476
社区成员
发帖
与我相关
我的任务
分享
#include <chrono>
#include <iostream>
#if 1
#define mydelete(p) if(p) delete p
#else
#define mydelete(p) delete p
#endif
int main()
{
auto start = std::chrono::high_resolution_clock::now();
int* p = nullptr;
for (int i = 0; i < 90000; i++)
{
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
mydelete(p);
}
auto end = std::chrono::high_resolution_clock::now() - start;
std::cout << end.count() << std::endl;
}
#include <boost/timer/timer.hpp>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
namespace timer = boost::timer;
const long long iterNum = 1000000;
int *p = NULL;
{
timer::auto_cpu_timer atimer;
for (long long i = 0; i < iterNum; i++)
{
//p = new int(3);
if (p)
{
delete p;
}
}
}
{
timer::auto_cpu_timer atimer;
for (long long i = 0; i < iterNum; i++)
{
//p = new int(3);
delete p;
}
}
system("pause");
return 0;
}
关于效率问题,我专门试了下,不过我这个测试代码貌似有问题,里面是两个循环,一个是直接delete,一个是先判断再delete,结果那个循环在前面,哪个速度就快很多,我估计和cpu的cashe命中率有关系。但通过交换2个循环的顺序,还是可以大致判断出先判断的那个仅对于delete空指针来说要快那么一点点。但是我还测试了delete非空的有效指针,它的效率比delete空指针低几百倍,换句话说先判空再delete在实际应用中提升的效率估计微乎其微,甚至木有~
其实从那个宏的名字SAFE_DELETE来看就知道创出这个宏的人也不是为了什么效率,而是想要安全性,但事实上这个宏并不能提高任何安全性~