내 코드에서 파일 정렬을 수행 할 때 각 문자열의 첫 번째 요소를 비교하기 위해 strncmp
을 사용했습니다.두 문장의 strncmp가 단일 문장보다 많은 시간이 걸린다
코드 1 :
for (i = 1; i < file_cnt;)
{
if ((strncmp(info[i-1].name, "1", 1) == 0) &&
(strncmp(info[i].name, "2", 1) == 0))
{
to do....
i += 2;
}
else if ((strncmp(info[i-1].name, "2", 1) == 0) &&
(strncmp(info[i].name, "1", 1) == 0))
{
to do....
i += 2;
}
...
}
코드 2 :
for (i = 1; i < file_cnt;)
{
if (strncmp(info[i-1].name, "1", 1) == 0)
{
if (strncmp(info[i].name, "2", 1) == 0)
{
to do....
i += 2;
}
}
else if (strncmp(info[i-1].name, "2", 1) == 0)
{
if (strncmp(info[i].name, "1", 1) == 0)
{
to do....
i += 2;
}
}
...
}
가 여기에 Code 2
이 Code 1
보다 상대적으로 더 많은 시간이 소요 여기에 내 코드를 포함
. 크로스 플랫폼 장치로 작업 중이므로 Code 2
을 실행하면 코드의 다른 부분에 많은 문제가 발생합니다.
두 명령문 비교가 단일 명령문 비교보다 시간이 오래 걸리는 이유는 무엇입니까?
당신이 사용하고있는 컴파일러 (2 코드) 프로그램이 느려지 며 추가 스택 프레임을 생성합니다 중첩? 최적화가 끝났습니까? 또한'strncmp()'를 사용하여 한 문자 만 비교하는 이유는 무엇입니까? 'char's를 직접 비교할 수 있습니다. –
'strncmp'를 사용하지 않으면 * 더 빠르게 만들 수 있습니다. 두 문자 만 비교하기 때문에 (문자열 종결자를 잊지 마라.) if (info [i-1] .name [0] == '2'&& info [i - 1] ] .name [1] == '\ 0') ... ' –
또한 두 개의 코드 스 니펫은 * 동등하지 않습니다. 첫 번째 코드 단편에서 첫 번째'if'의 두 번째'strncmp'가 거짓이면 코드는'else'로 이동합니다. 두 비교가 모두 참이면 코드를 수행합니다 (예 :'i + = 2'). 그러나 두 번째 코드 단편에서 첫 번째 바깥 쪽 'if'가 true이고 첫 번째 중첩 된 'if'조건이 거짓이면 ***이 아닌 ***이 else로 이동합니다. –