1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include "pch.h" #include <iostream> #include <vector> #include <cmath> #include <Windows.h> int main() { const char* str1 = "aaaaaaaaaa_aaaaaaaaaa"; const char* str2 = "bbbbbbbbbb_bbbbbbbbbb"; int result = 0; DWORD start = 0, end = 0; start = GetTickCount64(); for (unsigned long long i = 0; i < 100'000'000'000; ++i) { result = std::strcmp(str1, str2); } end = GetTickCount64(); std::printf("std::strcmp(): %ld\n", end - start); start = GetTickCount64(); for (unsigned long long i = 0; i < 100'000'000'000; ++i) { result = str1 == str2; } end = GetTickCount64(); std::printf("operator==: %ld\n", end - start); } | cs |
strcmp랑 ==랑 뭐가 더 빠른지 궁금해서 이렇게 했는데, 뭔가 성능 체크할때 이것 말고도 고려해야하는 부분 있음?
아니면 그냥 이렇게만 체크하고 어느 하드웨어 환경에서 테스트한거다~ 이런식으로 글만 남겨두면 됨?
테스트 환경 말한거임
GetTickCount64 정밀도가 15ms정도여서 제대로 측정 안 될 것.
https://docs.microsoft.com/ko-kr/windows/win32/sysinfo/acquiring-high-resolution-time-stamps
그리고 const char* 의 ==는 다시 짜야 함 그리고 저렇게 짜면 비주얼 스튜디오가 최적화해서 값 안 나올 가능성 농후
옵션에서 최적화 없음으로 하고 테스트하면 안됨?? 보통 테스트할때 최적화 키고 하는건가
형님도 사랑합니다
그냥 너가 짜지 말고
https://quick-bench.com/
이거 쓰셈.
뉴비가 벤치마크 짜는거 아님.
사랑해용
str1 == str2 주소비교라 사실상 의미없음
생각해보니까 그러네. string쓰다보니 헷갈렸음
정밀한 시간 얻으려면 rdtsc가 최고긴 함 근데 워크로드가 너무 작아서 충분히 정밀할지 모르겠네 캐시나 뭐 그런 외부 요인이 너무 클거같음
엄밀하게 하려면 서로 다른 두 프로그램으로 짜야될거같음 근데 이것저것 고려하다보면 대가리 깨지니 대충 경향성만 보는게 나을듯