동적할당이란?
동적할당이 무엇일까 동적할당의 반대되는 개념으로 정적할당이 있다.
정적할당은 우리가 지금까지 써온 변수의 선언 방식은
이와같이 우리가 먼저 사용할 메모리의 크기를 지정해 준다.
그로인해서 생기는 단점은
처음 결정된 크기보다 더 작은 입려이 들어온다면 낭비가 생긴다.
프로그램 실행 도중 크기가 변경되지 않는다.
프로그램이 종료되어야 메모리가 해제된다.
이러한 정적할당과 다른 동적할당은
프로그램을 실행도중에 메모리를 할당 받으므로 낭비를 최소화 한다.
동적할당 사용이유
그렇다면 이러한 동적할당을 왜 사용할까
동적할당을 사용한다면 자기가 필요한 만큼만 메모리를 할당받으니
효율적으로 사용이 가능하다.
동적할당 사용법
동적할당을 사용하려면 4가지의 함수가 있다.
malloc: 힙에서 메모리 할당.
calloc: 힙에서 메모리 할당, 0으로 초기화.
realloc: 기존 할당된 메모리의 크기를 변경
free: 동적할당된 변수를 해제.
malloc형은 반환하는 형태를 써주고 malloc(sizeoif(int))는 malloc이 int형 즉
4바이트 만큼의 크기를 가지겠다는 뜻입니다.
calloc형은 malloc과 같이 반환 형태를 써주고 calloc(할당할 개수,각각의 크기);
로 써주시면 됩니다.
realloc형은 위에 malloc과 calloc과는 좀 다르게 생겼다.
realloc(변경하고자 하는 변수,크기) 이렇게 사용하면 된다.
메모리 누수
메로리 누수는 할당한 메모리가 해제되지 않은채 메모리를 계속 할당하는 경우이다.
이러한 현상은 할당한 메모리의 주소를 잃어버리거나 실수호 해제 하는것을 까먹었을
경우에 발생한다.
댕글링포인터
댕글링 포인터는 해제된 메모리를 가리키는것이다.
메모리 접근시 예측 불가능한 동작, 잠재적 보안 위험이 있다.
그러면 이러한 댕글링 포인터문제를 어떻게 해결할까?
메모리 해제후 포인터를 NULL로 설정하면된다.
메모리 구조
위에 설명한 동적할당을 하게되면 힙 영역을 할당한다.
Code(코드) | 함수,제어문,상수 |
Data(데이터) | 전역 변수, 배열 |
Heap(힙) | 동적할당 |
Stack(스택) | 지역 변수 |
Code
실행할 프로그램의 코드가 저장된다.
Data
프로그램 시작과 동시에 할당,종료되면 메모리에서 소멸
Heap
주소값에 의해서만 참조된다. 실행중에 메모리를 추가로 할당하고자 할때 사용된다.
Stack
임시 메모리 영역이다. 실행중에는 크기 변경이 불가능하다.
'report' 카테고리의 다른 글
리눅스 보고서 (0) | 2019.05.27 |
---|---|
C개인 프로젝트 보고서 (0) | 2019.05.17 |
포인터 보고서 (0) | 2019.04.08 |
함수 보고서 (0) | 2019.04.08 |
배열 보고서!! (0) | 2019.04.01 |