_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › Left()함수가더빠를까
|
|
Left()함수가 더 빠를까요? 아니면 Right()함수가 더 빠를까요? 제가 보기에는 Left()함수가 더 빠릅니다. 이유는 문자열을 처리하는 방법에 있습니다. Left()함수는 어떻게 동작할까요? 예를 들어 “ABC”는 개념적으로 다음과 같은 배열에 담겨져 있습니다. (아마도 대부분의 DBMS는 C계열의 언어로 만들어졌을 것입니다.)
![]() 즉, 변수 ch는 A의 주소를 가리키고 있고, ‘\0’ 문자를 만날 때까지 읽습니다. (문자열은 이렇게 동작합니다.) Left()함수는 읽어야 하는 문자의 위치에 다음 그림과 같이 ‘\0’을 넣기만 하면 됩니다.
![]() 그러면 “AB”만 읽고, ‘\0’을 만났으므로 읽는 것을 멈춥니다. 그러면 Right()함수는 어떻게 구현될까요? 아마도 다음과 같이 구현될 것입니다.
![]() 정리해보면 Left()함수보다 Right()함수가 문자열의 끝을 찾는 짓거리를 더 해야 한다는 것입니다. 만약 문자열이 조낸 길다면 ‘\0’을 찾기 위해 문자열을 처음부터 조낸 읽어야 한다는 결론이 나옵니다. 그래서 .. 아.. 까먹었다. 떱.. ㅡ,ㅡ;;
암턴.. ‘조엘 온 소프트웨어’라는 책을 보면 문자열의 처음에 문자열의 길이를 저장하는 부분을 추가하는 짓거리를 하면 긴 문자열에 대한 처리시 더욱 빠르게 처리할 수 있다고 합니다. (왜냐하면 포인터는 원하는 위치로 바로 점프가 가능하니까요.) 이 따위 구조로 ..
![]() 즉, 변수 ch에 3이라는 값이 들어있는 주소를 가리킨다는 것입니다. ch[0]에는 3이 들어가 있으며, 문자열의 시작의 값은 *(ch+1)이 되는 것입니다. 그러므로 문자열의 끝은 ch+ch[0]+1이 되겠지요. 물론 문자열을 입력할 때 길이를 알아내야 하지만 문자열의 특성상 저장 후에도 문자열의 길이를 알아내야 하는 경우는 매우 빈번하게 일어나기 때문에 긴문자열을 다룰 경우는 이러한 방법이 도움이 될 것입니다. 그러므로 Right(charCol, p) 이고, charCol이 n글자이면, ch + (n + p) – 1 가 원하는 포인터의 위치가 될 것입니다. 이러면 Left()나 Right()나 거의 똑 같은 비용으로 처리가 될 것입니다. 아.. 이야기를 하다 보니 처음에 ‘Left()함수가 더 빠르다’라는 말이 거짓말이 되부럿습니다. 에이.. 젠장~ 내가 그렇지모..
프로그램 졸라 못 짜는 놈이 이런 야그 할라니 민망합니다. 아.. 생각났습니다. 아까 ‘조엘 온 소프트웨어’에서 나왔던 것이 ‘파스칼 문자열’ 이었던 것 같습니다. (설마 포트란 문자열은 아니겠죠? ㅡ,.ㅡ;;) 책을 회사에 두고 와서 기억력 나쁘다는 것을 광고하게 생겼네요..허헛.. 암턴!! 결론은.. 나도 모르겠네요. ㅎㅎ 내가 소스를 까본 것도 아니고, 소스를 줘도 이해를 못할 테니.. 그쵸? 헤헤..
|
누군가에게 그날을 생애 최고의 날로 만들어 주는 것은 그리 힘든 일이 아니다. (댄 클라크) |