OpenCV 데이터 구조 CvMemStorage
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 는 사용 중인 메모리 블록 을 방출 하 는 유일한 방법 입 니 다. 메모: 메모리 블록의 일부 메모 리 를 방출 할 수 있 는 방법 은 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.