KEEP GOING

동적 메모리 할당 : malloc(), memset() 본문

etc

동적 메모리 할당 : malloc(), memset()

jmHan 2020. 11. 10. 20:29
반응형

#include <stdio.h>

int main(){

 int num;

 int *numPtr;

 

numPtr = &num;

 return 0;

}

 

이처럼 우리는 변수의 메모리 주소를 저장하여 포인터 변수를 사용해 왔다.

 

하지만 이러한 방식은 프로그램 실행 중에 할당된 공간의 크기가 바꿀 수 없다.

이러한 문제를 해결해주는 함수가 malloc()이다.

   

포인터 변수에 malloc()함수를 쓰면 원하는 시간에 원하는 만큼 메모리 공간을 할당이 가능하다. 

따라서 이를 동적메모리할당이라 부르기도 한다. 

 

(1) malloc()

기본적으로 malloc함수는

malloc()으로 메모리할당 -> 메모리 사용 -> free()으로 메모리 해제 과정을 거친다.

 

포인터 변수에 변수의 메모리 주소를 저장하는 경우, stack 영역의 메모리를 사용한다. 

반면, malloc()을 사용하는 경우 stack() 영역의 메모리를 사용한다.

 

heap영역의 메모리는 메모리를 해제하지 않을 경우 시스템에서 메모리가 부족해져 메모리 누수가 발생할 수 있다.

따라서 반드시 free()를 통해 메모리를 해제해야 한다. 

 

- malloc() = memory allocation(메모리 할당)의 줄임말

- stdlib.h 헤더파일에 선언되어 있음 ( malloc() 사용시 선언 필요)

 

 

(2) memset()

 

memset()을 사용할 경우, 동적으로 메모리 크기를 할당할 뿐만아니라

메모리에 저장될 내용까지 한번에 설정할 수 있다. 

 

- memset() = memory set(메모리 설정)의 줄임말

- string.h와 memory.h에 선언되어 있음 ( memset() 사용시 둘 중 하나 선언 필요)

- 포인터 변수가 가리키는 메모리 공간을 초기화하는 용도로 자주 쓰인다.

 

 

반응형
Comments