프로그램의 메모리공간은
- 프로그램 실행 시, RAM에 변수선언(지역변수,전역변수)를 위해 할당된다.
- stack, heap, data영역으로 나뉘어 진다.
1. Data 영역
- 전역변수와 static변수가 할당된다.
- 시작과 동시에 할당, '프로그램' 종료시 소멸
2. stack 영역
- '함수 호출시' 지역변수와 매개변수가 할당된다.
- '함수 호출 완료' 시 삭제(소멸) // 종료 보다 호출 완료가 적합하다 생각
- 컴파일 하면서 메모리 계산
3. heap영역
- 필요에 의해 '동적으로 메모리 할당' 시 사용
- 실행하면서 메모리의 크기를 그때 그때 결정할 때 사용
from http://dsnight.tistory.com/50
결론 : 동적할당은 메모리(stack, data, heap)에서 heap영역을 사용하는 기술
1. malloc() : 동적으로 메모리를 할당하는 기술 // memory allocation
void* malloc(size_t size)
ex)
int i* = (int*) malloc( size of(int) );
- void* : 개발자가 알맞게 반환형을 결정하라고 설정, 예제에서는 int*로 변환하였다.
- malloc함수가 int의 size(4byte)를 heap에 할당한다.
- 메모리의 주소가 void*로 return된다
- void*를 int*로 변환
- 포인터 i에 주소값 대입(int*)
응용)
arr_2 = (int*) malloc(size of (int) *5); 처럼 곱하여 데이터 할당할 때 사용
=> cf) calloc(size_t elt count, size_t elt size)
- 요소가 int형 5개인 것을 알고 있을 경우
- elt count =5, elt size = size of(int)를 대입 => calloc(5,size of (int))
- 위의 예제와 비슷하게 사용가능
- 차이점은 0으로 초기화 시켜주는것.
2. free() : heap에 할당된 메모리 해제
- 위에서 보면 arr_2에 malloc()를 사용했는데
- free(arr_2); 를 넣으면 메모리가 해제된다.
3. realloc() : 할당된 메모리 크기 변경(재할당) / re allocation
void* realloc(void* memoryblock, size_t size);
사용 : malloc에서 반환된 주소포인터를 대입하고 , malloc처럼 원하는 사이즈를 대입한다.
응용예 => http://gis8282.tistory.com/entry/13-%EB%8F%99%EC%A0%81-%ED%95%A0%EB%8B%B9
'전공지식정리 > 영상처리(Image Signal Processing)' 카테고리의 다른 글
HOG(histograms of oriented gradients) (0) | 2022.01.20 |
---|---|
오버로드된 함수 ~의 인스턴스중 사용할 인스턴스를 확인할 수 없습니다. (0) | 2022.01.20 |
cvSobel (0) | 2022.01.20 |
machine learning (0) | 2022.01.20 |
[스크랩][공유] 허접한 교통표지판 인식 구현 동영상입니다. (0) | 2022.01.20 |