char temp2[STRLEN];
for (int i = 0; i < LOOP_COUNT; ++i)
{
begin1 = __rdtsc();
len1 = strlen(temp);
end1 = __rdtsc();
//temp[LEN] = 0;
temp2[LEN] = 0;
begin2 = __rdtsc();
len2 = strlen_ex(temp);
end2 = __rdtsc();
//temp[LEN] = 0;
temp2[LEN] = 0;
if (end1 - begin1 < min1) min1 = end1 - begin1;
if (end2 - begin2 < min2) min2 = end2 - begin2;
}
이런식으로 특정 코드가 안들어가면 strlen이 0이 나옵니다.
이것은 어떤 의미인가요?
생각해보니 별 의미는 없을듯해보이네요.
temp[LEN] = 0; 를 해주는 이유가 뭘것 같냐.
제멋대로 컴파일러가 최적화 걸면 이전 계산에서 변경되지 않았을때 바로 리턴하기 때문이다.
입력 조건을 리프래쉬 해주기 위해 저렇게 한거야.
컴파일러가 바보같이 최적화 못하게 속여주는 트릭이지.
수정되지 않은 문자열을 계속 계산하고 있을 이유는 없을테니 물론 의미는 없겠죠.
성능 측정할땐 일부러 저렇게 리프래쉬 해주는거야. 캐쉬도 컨트롤해야하고.
네네 깊게 생각도 안해보고 글을 적어버렸네요. 부끄럽게 시리