#include iostream
using namespace std;
#define N 10000
__int64 rdtsc()
{
__asm rdtsc;
}
class employee {
public:
virtual int salary(){return 0;}
};
class manager : public employee {
public:
int salary();
};
class programmer : public employee {
public:
int salary();
int bonus();
};
int main()
{
__int64 start;
__int64 end;
__int64 sum = 0;
__int64 record[N];
employee *pe = new employee;
for (int i = 0;iN;i++)
{
start = rdtsc();
programmer *pm = dynamic_cast programmer* ( pe );
end = rdtsc();
delete pm;
record = end - start;
sum += record;
}
for (int i = 0;iN;i++)
coutrecordendl;
coutsumendl;
return 0;
}
windows下的话就用QueryPerformanceCounter和QueryPerformanceFrequency。starisme (CS09|Mage) 在 ta 的帖子中提到:用rdtsc测量C++中dynamic_cast的耗时,源码如下。奇怪的是,循环的第一次耗时总是特别大,大约是几k个时钟周期。而到了后面就会下降到200个时钟周期左右。请问这是为什么?code#includeiostreamusingnamespacestd;#defineN10000__int64rdtsc(){...........................
oops,学习了,忘了cache@@vonNeumann (冯·诺伊曼|Farewell,PKU) 在 ta 的帖子中提到:第一次如果和后面一样的速度才不正常了第一次要真正从内存读(dynamic_cast的实现在一个函数里,以及它的实现还要访问虚表等,第一次调用时可能还会触发多次缺页异常),后面就全在cache里
应该是这个,等我测试一下vonNeumann (冯·诺伊曼|Farewell,PKU) 在 ta 的帖子中提到:第一次如果和后面一样的速度才不正常了第一次要真正从内存读(dynamic_cast的实现在一个函数里,以及它的实现还要访问虚表等,第一次调用时可能还会触发多次缺页异常),后面就全在cache里