코딩/C, C++

[C] C 언어 공부 정리 - 메모리, 동적 할당

Esunn 2022. 8. 5. 16:20

https://modoocode.com/98

 

씹어먹는 C 언어 - <20 - 1. 동동동 메모리 동적할당(Dynamic Memory Allocation)>

 

modoocode.com

 

동적할당 부분을 정리해놓은 글이다.

 

배열의 크기를 정할때는 컴파일 시간에 확정이 되어 있어야 한다.

배열을 명확한 크기를 정해놓아야 한다.

그래서 대부분 배열을 충분히 크게 설정한다.

그러나 이러면 메모리가 낭비되는 경우가 많다.

 

이럴때 동적 메모리 할당 이라는 방법을 이용한다.

 

malloc 함수를 이용한다.

이는 memory allocation의 약자이다.

 

이 함수를 사용하기 위해서는

#include <stdlib.h>

코드를 써줘야 한다.

 

free를 이용해 메모리 영역을 다시 돌려준다. 

이를 해제(free)라고 한다.

 

free를 제대로 하지 않아 발생하는 문제를 메모리 누수(memory leak)라고 한다고 한다.

이 부분은 이것만 봐서는 이해가 잘 안돼서 다른 자료들도 참고했다.

 

 

열혈 C 프로그래밍 - 25강

책의 25강에서 메모리 구조와 동적 할당을 다뤄 이 부분을 정리해 보려 한다.

C 언어의 메모리의 구조

4개의 메모리 영역으로 나누어져 있다.

 

코드 영역 (Code Area)

실행할 코드가 저장됨 CPU는 코드 여역에 저장된 명령문드을 하나씩 가져가서 실행함.

 

데이터 영역 (Data Area)

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

이 영역에 할당되는 변수들은 프로그램의 시작과 동시에 할당되어 프로그램 종료시까지 남아있음.

 

스택 영역 (Stack Area)

지역변수와 매개변수가 할당됨. 함수를 빠져나가면 소멸된다는 특징이 있음.

 

힙 영역 (Heap Area)

데이터 영역과 스택 영역에 할당되는 변수들은 생성과 소멸의 시점이 경정되어 있다.

하지만 다른 성격의 변수가 필요하기도 하는데 C언어에서 프로그래머가 원하는 시점에 변수를 할당하고 

소멸하도록 지원을 하는 유형의 변수들이 할당되는 영역이 힙 영역이다.

 

 

스택은 차곡차곡 쌓여져 나가기에 처음 할당된게 가장 마지막에 소멸된다.

지금까지 내용을 정리