ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • String
    개발하면서/코드보면서 2011.12.10 23:53
    sds는 Redis에서 사용하는 문자열 관련 자료구조다


    문자열을 붙이고, 메모리가 부족하면 다시 재할당하고.......
    비교하고 삭제하고, 이런건 알겠는데
    sdshdr의  buf[]의 개념이 뭔지 너무너무 궁금했다


    kldp에 질문을 해서 http://kldp.org/node/128629   
    flexible array member 키워드를 알게 되었고
    검색한 결과 두개의 url을 통해 확실히 알게됐다

    아래 두 url을 읽고, 이해하면 String은 끝~~ㅋㅋㅋ 날로먹네!!!

    http://minjang.egloos.com/2254472
    http://tksssch29.tistory.com/entry/Flexible-array-member

    minjang님 blog에서 포인터로도 가능한걸 보여주면서 지역성 문제를 예로 들었다.


    그런데 아래와 같이 하면 되지 않을까?   혹시 제가 잘못 생각한거라면 알려주세요~~



    result : size : 12 string : kang han goo
              len : 0x0x9281008, size : 0x0x928100c, buf : 0x0x9281010


    그리고 sdsnew, sdsnewlen을 할때 struct sdshdr* 을 리턴하는게 아니라 실제 문자열 포인터를 리턴한다.
    그럼 len, free 정보를 알고 싶을때는? 

    struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));   access횟수를 줄이기위한 좋은 팁을 배웠다. ㅎㅎ :)
    구조체 중에서 자주쓰는걸 직접 리턴하고 메타정보들은 포인터 이동으로 접근!!

    TAG

    댓글 0

Designed by Tistory.