다음 방법을 사용하여 STL 컨테이너 vector, deque, list, multiset 및 multimap에 대한 일부 작업 시간을 측정했습니다. 내가 STL 컨테이너에 벡터에서 요소를 추가 한 다음 벡터로 이동하고, 문자열의 전체 목록 상자를 :타이밍 STL 컨테이너 - 와이드 변형?
PrecisionTimer::PrecisionTimer()
{
LARGE_INTEGER cps;
LARGE_INTEGER init_cnt;
QueryPerformanceCounter(&init_cnt);
QueryPerformanceFrequency(&cps);
start_count = init_cnt.QuadPart;
microseconds_per_count = 1000000.0/cps.QuadPart;
}
void PrecisionTimer::ReStart()
{
LARGE_INTEGER init_cnt;
QueryPerformanceCounter(&init_cnt);
start_count = init_cnt.QuadPart;
}
// in microseconds
unsigned int PrecisionTimer::ElaspedTime() const
{
LARGE_INTEGER cnt;
QueryPerformanceCounter(&cnt);
return (unsigned int)((cnt.QuadPart - start_count)
* microseconds_per_count + 0.5);
}
과정은 단순히 이것이다. 그런 다음 컨테이너에서 모든 요소를 제거하고 마이크로 초가 걸리는 시간을받습니다.
내 질문에 대한 차이점 : 때로는 내 재판이 첫 번째 시도와 다른 60,000+ 마이크로 초입니다. 왜? 타이머 구현과 관련이 있습니까? 나는 timeslicing과 high-speech cache의 효과 방향을 지적했다. 아무도 그것에 정교 할 수 있습니까? CPU 사용이 영향을 줍니까?
더 나은 타이머 구현을 요구하지 않습니다. 나는 그것이 왜 다른지 묻습니다.
금요일 오후 4시 55 분에서 5 시까 지 갈 시계 - 외계인! –
최적화로 컴파일 중입니까? 타이밍에 맞지 않는 코드가 부작용이 없다면 최적화되지 않았습니까? 실행중인 테스트를 보지 않고도 추측하기가 어렵습니다. –
최적화되지 않은 또는 "디버그"빌드를 실행중인 경우 타이밍 테스트가 의미가 없습니다. – PaulMcKenzie