eliwook 님의 블로그
동적 메모리 할당 본문

동적메모리 할당은 프로그램 실행 중에 필요한 만큼의 메모리를 할당하고 해제하는 기법이다.
우리는 프로그램을 실행시키게 되면
그래서 사용이 필요할때 요구를 하고 사용이 끝나면 반납을 해야한다.

처음 프로그램이 컴파일 되면 자동으로 메모리가 할당이 된다. 이를 정적할당이라고 한다. 이는 스택영역에 저장이 된다.
동적할당은 프로그램 사용중 중간에 데이터를 생성하고 삭제할 수 있다. 힙 영역에 데이터를 생성 및 삭제가 된다.
사용이 끝난 메모리는 쓰래기와 마찬가지이다. 사용은 안하는데 공간을 차지하고 있는 것이다. 우리가 가지고 있는 공간은 좁으니 쓰레기를 치워야 한다. 직접 치우던지 아니면 로봇청소기를 돌리던지..
직접치우는것과 로봇청소기를 비유한 이유는 프로그래밍 언어에 따라서 이 쓰레기를 치워주는 녀석이 있고(Grabige Collector) 프로그래머가 직접 지워야 하는(free) 녀석이 있기 때문이다.
쓰레기를 치우지 않으면 메모리 누수가 발생하게 된다. 메모리 누수가 발생하게 되면 사용가능한 메모리가 점차 줄어들게 되어 프로그램이 충돌될 수 있고 시스템이 불안정해질 수 있다.
C언어에서는 동적 메모리 할당을 사용자가 직접 해줘야한다. 메모리 할당 방법에는 3가지가 있다.
malloc
동적으로 메모리를 할당하는 함수이다.
프로그램의 메모리 구조에서 우리는 정적인 변수들은 stack에 저장이되고 동적인 메모리는 heap에 저장이 된다.
malloc은 할당 한 메모리를 초기화 하지 않는다.
calloc
calloc은 malloc과 같이 메모리를 할당을 하지만 다른점이 두가지 있다.
- 메모리 할당과 동시에 0으로 초기화를 한다.
- 할당할 변수의 개수를 선언한다.
메모리 할당과 동시에 0으로 초기화를 함으로 이전에 있던 메모리의 값을 지울 수 있게 된다. 할당한 메모리의 크기가 클 경우 malloc보다 더 느린 단점이 있다.
realloc
malloc과 calloc은 메모리를 새로 할당하는 함수였다면 realloc은 이미 할당된 메모리 공간의 크기를 변경할때 사용이 된다.
이렇게 생성된 동적 메모리는 free()라는 함수로 사용이 끝나면 해제를 해줘야한다.
그렇지 않으면 메모리에 사용이 끝난 데이터(쓰레기 데이터)가 남아 있어서 메모리 고갈이 된다.(메모리누수)
우리는 프로그램을 실행시키게 되면
그래서 사용이 필요할때 요구를 하고 사용이 끝나면 반납을 해야한다.
처음 프로그램이 컴파일 되면 자동으로 메모리가 할당이 된다. 이를 정적할당이라고 한다. 이는 스택영역에 저장이 된다.
동적할당은 프로그램 사용중 중간에 데이터를 생성하고 삭제할 수 있다. 힙 영역에 데이터를 생성 및 삭제가 된다.
사용이 끝난 메모리는 쓰래기와 마찬가지이다. 사용은 안하는데 공간을 차지하고 있는 것이다. 우리가 가지고 있는 공간은 좁으니 쓰레기를 치워야 한다. 직접 치우던지 아니면 로봇청소기를 돌리던지..
직접치우는것과 로봇청소기를 비유한 이유는 프로그래밍 언어에 따라서 이 쓰레기를 치워주는 녀석이 있고(Grabige Collector) 프로그래머가 직접 지워야 하는(free) 녀석이 있기 때문이다.
쓰레기를 치우지 않으면 메모리 누수가 발생하게 된다. 메모리 누수가 발생하게 되면 사용가능한 메모리가 점차 줄어들게 되어 프로그램이 충돌될 수 있고 시스템이 불안정해질 수 있다.
C언어에서는 동적 메모리 할당을 사용자가 직접 해줘야한다. 메모리 할당 방법에는 3가지가 있다.
malloc
동적으로 메모리를 할당하는 함수이다.
프로그램의 메모리 구조에서 우리는 정적인 변수들은 stack에 저장이되고 동적인 메모리는 heap에 저장이 된다.
malloc은 할당 한 메모리를 초기화 하지 않는다.
calloc
calloc은 malloc과 같이 메모리를 할당을 하지만 다른점이 두가지 있다.
- 메모리 할당과 동시에 0으로 초기화를 한다.
- 할당할 변수의 개수를 선언한다.
메모리 할당과 동시에 0으로 초기화를 함으로 이전에 있던 메모리의 값을 지울 수 있게 된다. 할당한 메모리의 크기가 클 경우 malloc보다 더 느린 단점이 있다.
realloc
malloc과 calloc은 메모리를 새로 할당하는 함수였다면 realloc은 이미 할당된 메모리 공간의 크기를 변경할때 사용이 된다.
이렇게 생성된 동적 메모리는 free()라는 함수로 사용이 끝나면 해제를 해줘야한다.
그렇지 않으면 메모리에 사용이 끝난 데이터(쓰레기 데이터)가 남아 있어서 메모리 고갈이 된다.(메모리누수)
'Jugle > Today I Learned' 카테고리의 다른 글
| 네트워크 OSI 7Layer TCP/IP 4 Layer (0) | 2024.08.18 |
|---|---|
| 쉽게 이해하는 socket통신 (0) | 2024.08.17 |
| R-B Tree의 삭제 (0) | 2024.08.08 |
| R-B Tree의 삽입 (0) | 2024.08.01 |
| [C언어] Stack 구현 문제 풀이 (0) | 2024.07.31 |