1바이트씩 비교하면 느릴거가튼데
문자열 길이를 4로 나눠서 나머지 담아놓고 *(unsigned int*)p == *(unsigned int*)s
이런식으로 4로 나눈 몫만큼 비교하고 나머지는 1바이트씩 비교한다든가 식으로 하면 더 빠른가요?
궁금한게 많네요
문자열 길이를 4로 나눠서 나머지 담아놓고 *(unsigned int*)p == *(unsigned int*)s
이런식으로 4로 나눈 몫만큼 비교하고 나머지는 1바이트씩 비교한다든가 식으로 하면 더 빠른가요?
궁금한게 많네요
물론 빠르지만 마무리가 문제.
캐스팅해서 3바이트씩 비교도 가능한가요?
스트링이 4의배수면 이런식으로 비교하는거랑 원본 strcmp랑 뭐가더빠르죠?
스트링의 길이를 알아야 되면 이미 망한 strcmp 지.
NULL 문자 detection 비용이 비싸서 조율이 까다로와.
스트링의 길이가 4의 배수면 원본 strcmp 보다 빠를 수는 있지만,
해당스트링이 4의 배수 주소에 할당되었다 쳐도
부분 문자열의 시작주소는 4의 배수가 아닐수 있으니,
근데 문자 하나 0인지 비교하는건 어셈 한두줄 아닌가요?(어셈알못)
4의 배수 단위 주소의 경계에서 앞 뒤 4바이트를 비교하는 상황이 벌어질 수 있고,
그러면 성능이 떨어져유.
문자 하나를 0인지 비교하면 이미, 4바이트 compare 의 잇점이 없지.
구현해보면 알게 돼 : )
ㅇㅎ
심지어 4바이트 당 문자 하나씩만 담잖아? 그래도 1바이트 비교보단 빠름.
다만, 캐시 히트 효율이 떨어지긴 하지.
리틀엔디언 시스템에선 못씀. 성능 차이도 배이상 나지도 않고.