달력

112017  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
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횟수를 줄이기위한 좋은 팁을 배웠다. ㅎㅎ :)
구조체 중에서 자주쓰는걸 직접 리턴하고 메타정보들은 포인터 이동으로 접근!!

저작자 표시 비영리
신고
Posted by 오산돌구
TAG