2012-09-24 2 views
2

적어도 g ++를 사용하는 strcmp는 많은 아키텍처에 대해 많은 최적화 기능을 제공합니다. 내 PC에서, Core2Duo E8400, strcmp는 straigforward 구현을 사용하는 것보다 2 배 빠릅니다.역 스트링을위한 효율적이고 이식 가능한 strcmp

두 개의 "역 문자열"을 비교하는 함수를 제공하는 라이브러리가 있다면 내 질문에. 역 문자열 char *s1s1으로 시작하고 일부는 s1-n으로 끝나며 s1-n == '\0' (여기서 n >= 0 및 모두 0 <= n' < n, s1-n' != '\0')으로 끝납니다.

물론이 기능은 strcmp만큼 효율적이고 이식성이 있어야합니다.

편집 : 두 개의 문자열이 같으면 알아 두어야합니다 (그래서 나는 더 큰 것을 알 필요가 없습니다.) 그런 다음 strcmp에 대한 동일한 optimitzations가 원칙적으로 역 문자열에 대해 잘 작동합니다.

+2

나는 대답이 '아니오'라는 것을 꽤 많이 내기를 기꺼이합니다. 0으로 끝나는 문자열은 일반적입니다. '\ 0 '으로 시작하는 * 문자열은 거의 전례가 없습니다. 그렇다면, 누가 그런 특이한 것들에 대한 도서관을 씁니 까? – MSalters

+1

이것은 내가 본 이상한 요구 사항 중 하나입니다! :) – unwind

+0

나는 그것을 할 수 있다고 확신하지만 그런 구현을 찾을 수 없습니다. 행운을 빕니다. –

답변

1

특정 아키텍처에서 strcmp에 대한 대부분의 최적화는 정렬 된 포인터 등을 사용하여 길게 캐스팅하는 것과 같이 여러 바이트를 함께 비교하는 트릭을 사용합니다. 이러한 종류의 최적화는 문자열의 역순을 비교하는 것과 같이 작동하지 않을 가능성이 있습니다. 오래 걸리면서 같은 번호를 다시 생성하면 효율 손실이 발생합니다. 그래서 내 생각에 대답은 '아니오'입니다.

0

문제가 있다면 역순으로 strcmp으로 작성했습니다. 두 가지 이유로 속도는 걱정하지 마십시오.

먼저 "병목 현상"으로 인해 strcmp을 갖는 프로그램은 거의 없습니다.

두 번째로 strcmp은 문자열이 길고 거의 동일하지 않으면 평균적으로 거의 문자를 비교하지 않을 가능성이 높습니다. 문자열을 비교하는 데 시간의 상당 부분을 소비하는 프로그램이 성능 튜닝을 요구하고 있습니다.

+0

나는 reverse strcmp를 이미 썼다. 내 프로그램의 performacne을 측정했는데 strcmp로 최적화 된 함수를 사용할 수 있다면 CPU 사용량의 약 5 %를 줄일 수 있지만 그 이상은 아니지만 부정적 결과는 없습니다. – user1476999

+0

내가 앉아있는 곳에서 [* 5 %는 꽤 작습니다 *] ​​(http://scicomp.stackexchange.com/a/2719/1262). 수정해야 할 부분이 더 있습니다. –

관련 문제