본문 바로가기
언어/C

[C] 메모리 관리 & 동적 할당

by merona99 2019. 1. 9.
반응형

메모리 구조


코드 / 데이터 / 힙 / 스택 영역으로 구분


1. 코드 영역

코드가 저장되는 메모리 공간


2. 데이터 영역

전역변수와 statice으로 선언되는 static 변수가 할당 

* 프로그램 종료 시까지 남음


3. 스택영역

지역변수와 매개변수가 할당

* 함수를 빠져나가면 소멸


4. 힙 영역

원하는 시점에 변수를 할당하고 소멸하도록 지원



프로그램의 실행 흐름


1. 전역변수 / static 변수데이터 영역에 할당 -> main함수 호출 -> 지역변수스택에 할당

2. main 내에서 함수가 호출 -> 함수의 매개변수 / 지역변수스택에 할당

3. 함수의 반환으로 함수호출 시 할당된 매개변수와 지역변수가 소멸

4. 프로그램 종료 -> 운영체제에 의해서 할당된 메모리 공간 전체를 반환 -> 전역변수 소멸


* 먼저 호출된 함수의 스택공간일수록 늦게 해제됨 == 쌓아올린 더미



메모리의 동적 할당 (힙 영역)


지역변수나 전역변수로 충분하지 않을때 사용


 malloc 함수

void * ptr = (타입) malloc(size)

할당된 공간이 쓰레기 값으로 채워짐33

 calloc 함수

void * ptr = (타입) malloc(개수, size) 

 할당된 메모리 공간의 모든 비트를 0으로 초기화

 realloc 함수

void ( ptr = (타입)  

 ptr이 가리키는 메모리의크기를 size 크기로 조절


malloc 

성공 시 할당된 메모리의 주소 값 반환

할당된 공간이 쓰레기 값으로 채워짐


calloc

할당된 메모리 공간의 모든 비트를 0으로 초기화


realloc

성공 시 새로 할당된 메모리의 주소 값, 실패 시 NULL 반환

반응형

'언어 > C' 카테고리의 다른 글

[C] 파일의 분활과 헤더파일  (0) 2019.01.11
[C] 매크로와 선행처리기  (0) 2019.01.10
[C] 파일 입출력  (0) 2018.12.07
[C] 구조체  (0) 2018.12.04
[C] 문자 & 문자열 관련 함수  (0) 2018.11.15

댓글