( 영/한글 혼합 )
테스트 스트링
volatile char test_string[] = "abcdefghijklmnopqrstuvwxyz가0나1다2라3마4바5사6아7자8차9카~타%파(하)\0abcdefghijklmnopqrstuvwxyz가0나1다2라3마4바5사6아7자8차9카~타%파(하)";
백만번 누적 길이 / 최소 소요클럭
( 영/한글 혼합 )
테스트 스트링
volatile char test_string[] = "abcdefghijklmnopqrstuvwxyz가0나1다2라3마4바5사6아7자8차9카~타%파(하)\0abcdefghijklmnopqrstuvwxyz가0나1다2라3마4바5사6아7자8차9카~타%파(하)";
백만번 누적 길이 / 최소 소요클럭
char에 한글은 왜 넣음
그리고 알려주신것과 같이 비교도 했었음요
char 에 한글을 왜 넣냐니...
ks5601 무시하심?
한글 넣으면 무조건 0x80넘을텐데.. 보통은 wchar_t쓰지않나요?
strlen 이 한글같은 확장문자를 처리하면 니가 짠 strlen 도 한글같은 확장문자를 처리하든지, 이름을 바꾸든지. 비교대상이 다른거지.
저 코드의 특성상 128 <= 문자 처리가 비용인건 맞는데, strlen_wrapper( const char* s ){ size_t l = strlen_ascii(s); return l + strlen_256(s + l); } 처럼 완전히 분리를 해 내든지.
저거 위에 반복되는 문자열 시작 부분에 백슬래쉬 0 넣은건데 디씨에서 씹힘.
한글까지하면 속도되게 느릴 것 같은데 빠르네요..
strlen은 '\0'이 나올때까지의 길이를 구하는게 역할인데 char에 0x80 넘는 값이 들어가던 안들어가던 무슨 상관?
ㄴ 이건 또 뭔소린지
C문자열에 무슨 글자가 들어가든 상관없어. 0x80보다 큰 값이 들어가든 작은 값이 들어가든 문자열의 끝을 나타내는 '\0'만 아니면 그게 제대로 된 문자인지 아닌지는 알바 아니고. strlen은 '\0'이 나타날때까지의 길이만 구하면 됨. '한글 넣으면 무조건 0x80 넘을텐데'라는 얘기랑 strlen이랑 노상관
리플에 '\ 0'이 왜 제대로 안나오냐 ㅋㅋㅋ
위에 ''로 나온건 전부 다 '\0'로 보면 됨.
char형식에 128넘는 문자가 얼마나 있겠음. 그거 고려해서 연산하나 줄여서 만들어 올렸던 거임. 애초에 한글 써놓으면 제대로된 길이가 안나올텐데... 그냥 메모리 할당용도같은 걸로밖에 못 쓸듯
UTF8만 써도 이런 소린 안나올텐데
멀티바이트문자열로 프로그래밍하는 경우는많이 못봤는데
너가 많이 못본거랑 strlen 명세랑 무슨 상관이야 ㅋㅋㅋ
젠 strlen명세를 무시한 것도 아닌데 왜 그러시는지 모르겠네요
ㅈㅅㅈㅅ 한글 넣으면 보통 wchar_t 쓴다길래 한글은 처리 안한 줄. 내 눈이 리신이었어.
그 1~127사이에 주로 분포하니깐 이걸 중심으로 검색하고 아닌 건 재검색하는 방식이예요. 그니깐 1~127사이에 많은 글자가 분포할 수록 유리한방법이죠. 코세횽님은 1~255까지 싸그리 잡는 거고. 비교연산은 연산자 하나차이
근데 127 넘는거 하나라도 들어가면 아마 255까지 하는 것보다 느릴거임
코로모 코드 64비트 오류있음 체크바람.
길이가 좀 길게 나오네.
코드 자체는 128 위를 무시한게 아닌데, 아래의 변명이 그랬지 뭐.
아래x 댓글.
예제좀 주세요 어디에 오류가 있는지 모르겠어요
음 아까 130 바이트 짜리 a~z 까지 다섯번 연속된 문장 던지니 132가 나오더니 이젠 또 괜찮네 =_= 뭐지; 걍 VC++ 디버거가 뽈짓하는듯.
음 64비트 에서 다시 나온다 =_=
64비트 플래그가 제대로 안먹었었군유~ 미안~