OpenCV 데이터 구조 CvMemStorage

5258 단어
1. 동적 메모리 저장 및 조작 함수 
CvMemStorage 
typedef struct CvMemStorage 
{ 
struct CvMemBlock* bottom;/* first allocated block */ 
struct CvMemBlock* top; /* the current memory block - top of the stack */ 
struct CvMemStorage* parent; /* borrows new blocks from */ 
int block_size; /* block size */ 
int free_space; /* free space in the top block (in bytes) */ 
} CvMemStorage; 

메모리 메모 리 는 시퀀스, 윤곽, 도형, 서브 구분 등 동적 성장 데이터 구 조 를 저장 할 수 있 는 바 텀 구조 이다.이것 은 일련의 똑 같은 크기 의 메모리 블록 으로 구성 되 어 있 으 며, 열 표 형 - bottom 도 메 인 은 열 첫 번 째 를 말 합 니 다. top 도 메 인 은 현재 가리 키 는 블록 을 말 하지만 열 끝 이 아 닙 니 다. bottom 과 top 사이 의 모든 블록 (bottom 포함, top 포함 하지 않 음) 은 공간 을 완전히 차지 합 니 다. top 과 열 끝 사이 의 모든 블록 (블록 끝 포함, top 포함 하지 않 음) 은비어 있 습 니 다. top 블록 자 체 는 일부 공간 을 차지 합 니 다. free space 는 top 블록 에 남 은 빈 바이트 수 를 말 합 니 다. 새로 분 배 된 메모리 버퍼 (cvMemStorageAlloc 함 수 를 통 해 할당 되 거나 cvseqPush, cvGraphiAddEdge 등 고급 함수 분 배 를 통 해 암시 적 으로 표 시 됩 니 다) 는 항상 현재 블록 에서 시 작 됩 니 다.(즉, top 블록) 의 나머지 부분 입 니 다. 나머지 부분 이 요 구 를 충족 시 킬 수 있다 면 (할당 할 수 있 는 크기). 할당 후 free space 는 새로 분 배 된 메모리 크기 를 줄 이 고 적당 한 열 을 저장 하 는 추가 크기 를 추가 합 니 다. top 블록 의 나머지 공간 이 분 배 된 블록 (버퍼) 을 만족 시 키 지 못 할 때 top 블록 의 다음 저장 블록 은 현재 블록 으로 설 치 됩 니 다.(새 top 블록) - free space 는 이전에 분 배 된 전체 블록 크기 로 설정 되 어 있 습 니 다. 빈 저장 블록 (즉, top 블록 이 열 끝) 이 존재 하지 않 는 다 면 새 블록 (또는 parent 에서 계승 하거나 cvCreate ChildMemStorage 참조) 을 할당 하고 이 블록 을 열 끝 에 추가 해 야 합 니 다. 따라서 메모리 (memory storage) 는 스 택 과 같 습 니 다.(Stack) 그러면 bottom 은 스 택 바닥 을 가리 키 고 (top, free space) 은 스 택 지붕 을 가리 키 고 있 습 니 다. 스 택 지붕 은 cvsaveMemStoragePos 를 통 해 저장 할 수 있 습 니 다. cvRestoreMemStoragePos 를 통 해 가리 키 는 방향 을 복원 하고 cvClearStorage 를 통 해 초기 화 할 수 있 습 니 다. 
CvMemBlock 
메모리 블록 구조 
typedef struct CvMemBlock 
{ 
struct CvMemBlock* prev; 
struct CvMemBlock* next; 
} CvMemBlock; 
CvMemBlock 은 하나의 메모리 블록 구 조 를 대표 합 니 다. 메모리 블록 에 저 장 된 실제 데 이 터 는 header 블록 뒤에 저 장 됩 니 다. (즉, 헤드 포인터 head 가 가리 키 는 블록 header 가 존재 합 니 다. 이 블록 은 데 이 터 를 저장 하지 않 습 니 다) 메모리 블록 의 i 바이트 는 표현 식 (char *) (mem block ptr + 1) [i] 을 통 해 저 장 됩 니 다.획득. 그러나 저장 구조의 도 메 인 을 직접 얻 을 필 요 는 없다. 
CvMemStoragePos 
메모리 블록 주소 
typedef struct CvMemStoragePos 
{ 
CvMemBlock* top; 
int free_space; 
} CvMemStoragePos; 
이 구 조 는 스 택 지붕 의 주 소 를 저장 합 니 다. 스 택 지붕 은 cvsaveMemStoragePos 를 통 해 저장 할 수 있 고 cvRestoreMemStoragePos 를 통 해 복원 할 수 있 습 니 다. 
________________________________________ 
cvCreateMemStorage 
메모리 블록 만 들 기 
CvMemStorage* cvCreateMemStorage( int block_size=0 ); 
Block size: 메모리 블록의 크기 를 바이트 로 표시 합 니 다. 크기 가 0 byte 이면 이 블록 을 기본 값 으로 설정 합 니 다. 현재 기본 크기 는 64k 입 니 다. 
함수 cvCreateMemStorage 는 메모리 블록 을 만 들 고 블록 을 가리 키 는 첫 번 째 지침 을 되 돌려 줍 니 다. 처음에는 저장 블록 이 비어 있 었 습 니 다. 머리 (즉: header) 의 모든 도 메 인 값 은 0 이 었 습 니 다. Block size 를 제외 하고.
cvReleaseMemStorage 메모리 블록 방출 
void cvReleaseMemStorage( CvMemStorage** storage ); 
storage: 방출 된 메모리 블록 을 가리 키 는 지침 
함수 cvReleaseMemStorage 는 모든 메모리 (메모리) 블록 을 방출 하거나 각각 parent (필요 하 다 면) 에 되 돌려 줍 니 다. 다음 에 header 블록 (즉, 머리핀 head 가 가리 키 는 블록 = free (head) 을 방출 하고 이 블록 을 가리 키 는 지침 (즉: head = NULL) 을 제거 합 니 다. parent 블록 을 방출 하기 전에 각자 의 child 블록 을 제거 합 니 다. 
cvClearMemStorage 
메모리 블록 비우 기 
void cvClearMemStorage( CvMemStorage* storage ); 
storage: 저장 블록 
함수 cvClearMemStorage 는 저장 블록의 top 을 저장 블록의 머리 부분 에 저장 합 니 다. (비고: 저장 블록의 저장 내용 을 비 웁 니 다) 이 함 수 는 메모 리 를 사용 하지 않 습 니 다. (메모리 만 비 웁 니 다) 이 메모리 블록 에 부모 메모리 블록 이 있다 면 함 수 는 모든 블록 을 부모 에 게 되 돌려 줍 니 다. 
cvMemStorageAlloc 
메모리 블록 에 메모리 버퍼 를 할당 합 니 다. 
void* cvMemStorageAlloc( CvMemStorage* storage, size_t size ); 
storage: 메모리 블록. 
size: 버퍼 크기. 
함수 cvMemStorageAlloc 는 메모리 블록 에 메모리 버퍼 를 할당 합 니 다. 이 버퍼 의 크기 는 메모리 블록 크기 를 초과 할 수 없습니다. 그렇지 않 으 면 실행 중 오류 가 발생 합 니 다. 버퍼 의 주 소 는 CV STRUCT ALIGN 바이트 (현재 sizeof (double) 로 조 정 됩 니 다. 
cvMemStorageAllocString 
저장 블록 에 텍스트 문자열 을 할당 합 니 다. 
typedef struct CvString 
{ 
int len; 
char* ptr; 
} 
CvString; 
CvString cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, int len=-1 ); 
storage: 메모리 블록 
ptr: 문자열 
len: 문자열 의 길이 ('\ 0' 을 계산 하지 않 음). 매개 변수 가 음수 라면 함수 가 이 문자열 의 길 이 를 계산 합 니 다. 
함수 cvMemStorageAllostring 은 저장 블록 에 문자열 의 복사 본 을 만 들 었 습 니 다. 이 구 조 는 문자열 의 길이 (이 길이 또는 사용자 로 전달 되 거나 계산 을 통 해 얻 을 수 있 음) 와 복 사 된 문자열 을 가리 키 는 지침 을 포함 하 는 구 조 를 되 돌려 줍 니 다. 
cvSaveMemStoragePos 
메모리 블록의 위치 저장 (주소) 
void cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos ); 
storage: 메모리 블록. 
pos: 메모리 블록 상단 위치. 
함수 cvsaveMemStoragePos 는 저장 블록의 현재 위 치 를 매개 변수 pos 에 저장 합 니 다. 함수 cvRestoreMemStoragePos 는 이 위치 (주소) 를 더 가 져 올 수 있 습 니 다. 
cvRestoreMemStoragePos 
메모리 블록 위치 복구 
void cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos ); 
storage: 메모리 블록. 
pos: 새로운 메모리 블록의 위치 
함수 cvRestoreMemStoragePos 는 인자 pos 를 통 해 메모리 블록의 위 치 를 복원 합 니 다. 이 함수 와 함수 cvClearMemStorage 는 사용 중인 메모리 블록 을 방출 하 는 유일한 방법 입 니 다. 메모: 메모리 블록의 일부 메모 리 를 방출 할 수 있 는 방법 은 없습니다.

좋은 웹페이지 즐겨찾기