🖥️ CS, 개발상식/자료구조

[자료구조/C] 동적 메모리 할당(dynamic memory allocation)

dev_zoe 2020. 7. 29. 19:25
반응형

동적 메모리 할당이란?

int a[100]과 같이 고정된 크기로 필요한 메모리 할당을 하는 방법을 정적 할당이라고 한다.

 

그러나 프로그램을 작성하면서 얼마나 많은 입력이 있을지 알 수가 없는 경우가 많다.

만약 고정된 크기보다 더 큰 입력이 들어온다면 프로그램을 처리하지 못하며, 더 작은 입력이 들어온다면 메모리를 낭비하게된다.

 

따라서, 이러한 문제를 해결하기 위해 실행 중에 필요한 만큼의 메모리를 운영체제에서 할당받아 사용하고, 사용이 끝나면 다시 시스템에 메모리를 반환하는 기능동적 메모리 할당(dynamic memory allocation)이라고 한다.

 

이 때, 동적 메모리가 할당 되는 공간힙(heap)이다. 힙은 운영체제가 사용되지 않는 메모리 공간을 모아 놓은 곳이다.

 

동적 메모리 할당 형식

데이터 타입 * 포인터 변수 = (데이터 타입*)malloc( 메모리 크기);

 

ex)

#include <stdio.h>
#include <stdlib.h> //malloc, free함수를 사용하기 위해서 stdlib.h를 include

int *p = (int*)malloc(sizeof(int));
*p = 5;
free(p);

  • malloc() 함수 : 힙(heap)에 size 바이트 만큼의 메모리 블록을 할당한다. 또한 동적 메모리 블럭의 시작 주소를 반환한다. 이 때 반환되는 주소의 타입은 void *이므로 이를 적절한 포인터로 형변환 시켜야한다. 따라서 malloc 함수 앞에 (데이터 타입*)을 입력하여 형변환한다. malloc()은 시스템의 메모리가 부족해서 요구된 메모리를 할당할 수 없으면 NULL을 반환하므로 NULL인지 검사하는 과정이 필요하다.
  • free() 함수 : 할당된 메모리 블록을 운영체제에게 반환한다. 

배열의 동적 메모리 할당 형식

데이터 타입 * 포인터 변수 = (데이터 타입 *)malloc(sizeof(데이터타입) * 배열의 크기);

 

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int *p = (int *)malloc(sizeof(int)*5);
    
    for (int i=0; i<5; i++)
    	p[i] = i; //*(p+i) = i;
        
    free(p);
}   

 

 

반응형

'🖥️ CS, 개발상식 > 자료구조' 카테고리의 다른 글

[자료구조/C] 스택(Stack)  (0) 2020.09.17
[자료구조/C] 선택 정렬(selection sort)  (0) 2020.07.30
[자료구조/C] 포인터  (0) 2020.07.29
[자료구조/C] 구조체  (0) 2020.07.26
[자료구조/C] 배열  (0) 2020.07.25