가비지 & 가비지 컬렉션
- 가비지 : 포인터(p1)에 다른 포인터(p2)에 담긴 주소값을 옮겨 담아서 p1이 다른 곳을 가리키면, 원래 가리키던 메모리는 아무도 사용하지 않고 아무도 가리킬 수 없는 상태가 되는데, 이때 이 아무도 사용하지 않는 쓰레기 메모리가 가비지!
- 가비지 컬렉션 : 시스템 상에서 가비지 컬렉터가 이 가비지를 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것 (수동으로 직접 해제해주지 않아도 됨)
- cf. 댕글링 포인터 : 이미 동적 할당된 메모리를 해제했는데 여전히 가리키고 있는 포인터. p1과 p2가 한 메모리를 동시에 가리키고 있다가 그 중 한 포인터에 의해 메모리를 해제한 경우!
- ex. 블록 밖으로 나가면서 Mat이 자동으로 해제됐는데 포인터는 그대로 가리킬 때
포인터 대입 (주소 변경)
short* psImage = NULL;
m_ciData.copyImage(9, psImage, nWidth, nHeight); // psImage -> m_ciData 가리킴
// Gaussian Filtering (smoothing)
Mat img(nWidth, nHeight, CV_16SC1, psImage); // convert Arr(short) to Mat(short)
Mat img_filtered;
GaussianBlur(img, img_filtered, Size(7, 7), 0); // 깊은 복사
psImage = (short*)img_filtered.data; // 얕은 복사 => "주소 변경!"
//SAFE_DELETE_ARRAY(psImage); // 안해줘도 됨! => "가비지 컬렉션"
cf. Mat은 내부적으로 메모리 동적 할당과 해제를 자동으로 해줌! (해당 블록 단위로)
'[ 언어 및 문법 ] > C, C++' 카테고리의 다른 글
[C++] bool vs BOOL (0) | 2022.08.14 |
---|---|
[C++] NAN, isnan() (0) | 2022.08.14 |
[C++, OpenCV] Convert Arr2Mat, Mat2Arr / 16bit(short) to 8bit(unsigned char) / CV_type (0) | 2022.08.14 |
[C++] 2차원 배열 동적 할당, 해제, 초기화 (0) | 2022.08.14 |
[C++] 전방 선언 (Forward Declaration) (0) | 2022.08.14 |