'프로그래밍/OpenCV'에 해당되는 글 1건

  1. 2010.10.07 CvMemStorage
프로그래밍/OpenCV2010. 10. 7. 17:43

CvMemStorage
동적으로 확장 가능한 메모리스토리지

 

몸체

typedef struct CvMemStorage
{

     struct CvMemBlock* bottom;      /* 최초로 확보된 블록 */
     struct CvMemBlock* top;       /* 새로운 블록을 확보하는 장소 */
     struct CvMemStorage* parent;       /* 현재의 메모리브록크 - 스택의 선두 */
     int block_size;      /* 블록의 크기 */
     int free_space;       /* top 블록내의 자유 영역(아르바이트 단위) */
} CvMemStorage;

 


메모리스토리지는 저레벨의 구조체로, 동적으로 확장 가능한 데이터 구조를 가져, 순서나 윤곽, 그래프, 세분화 등에 사용된다. 이것은 같은 사이즈의 메모리브록크의 리스트로서 편성되고 있다.


bottom 필드는 블록의 리스트의 선두, top(은)는 현재 사용되고 있는 블록을 의미하지만, 리스트의 마지막 블록은 반드시 필요하지 않다. top 이외의 bottom(으)로부터 top 까지의 블록은 모두 점유 되고 있다. top(을)를 제외한다 top(으)로부터 끝까지의 모든 블록은 비어 영역에서, top 블록 자체는 부분적으로 점유되고 있다. free_space(은)는, top 의 뒤로 남아 있는 아르바이트 단위로 나타난 자유 영역을 의미한다.

함수 cvMemStorageAlloc 그리고 명시적으로, 혹은 cvSeqPush(이)나 cvGraphAddEdge 등의 고레벨 함수에 의해서 간접적으로 확보된 새로운 메모리 영역은, 거기에 들어가는 경우에는항상 현재의 블록의 마지막에 확보된다. 확보 후 free_space(은)는, 적절한 얼라이먼트를 보관 유지하기 위해서, 확보한 밧파사이즈에 패딩을 더한 만큼 두개 줄여진다. 확보된 버퍼가 top 의 이용 가능한 영역에 들어가지 않는 경우, 리스트의 다음의 스토리지 블록이 top(으)로서 이용되어 free_space(은)는 확보전의 전브록크사이즈에 리셋트 된다.
만약 비어 블록이 없는 경우, 새로운 블록이 확보되어 (또는 부모로부터 빌리고,cvCreateChildMemStorage(을)를 참조), 리스트의 마지막에 추가된다.이와 같이 이 스토리지는 스택으로서 행동해, bottom 하지만 스택의 바닥, top(와)과 free_space 의 페어가 스택의 선두를 나타낸다. 

Posted by 마블(이환문)