---------------------------------------------------------
---------------------------------------------------------
메모리 동적할당이란
메모리를 동적으로 할당하는 것을 말하며
다이나믹 메모리 얼로케이션이라고 합니다.
---------------------------------------------------------
메모리 동적할당이란
프로그래머가 관리하는 메모리인 힙 공간에
메모리가 할당되는것을 말합니다.
---------------------------------------------------------
C언어의 메모리 구조를 살펴보면
코드 데이터 힙 스택
4가지가 있는데
코드는 프로그램에서 코드가 할당되는 영역
데이터는 전역변수와 static 변수가 할당되는 곳
힙은 프로그래머가 할당한 메모리가 저장되는 곳
스택은 지역변수와 매개변수가 할당되는 곳 입니다.
---------------------------------------------------------
우리가 이번장에서 다루어 볼것은
힙 영역이며
이 힙영역이
프로그래머가 메모리를 할당하고 해제하는
즉, 프로그래머가 관리하는 메모리 영역입니다.
---------------------------------------------------------
동적할당은 변할수 있는 값을 메모리의 크기로 줄수 있기 때문에
동적할당은 실행 후에 메모리의 크기를 알 수 있습니다.
동적할당의 반대말로 정적할당이 있습니다.
---------------------------------------------------------
정적 할당은 실행 전 에 메모리의 크기를 알 수 있습니다.
정적 할당의 예로는
배열이 있습니다.
int arr[4] = { 1, 2, 3, 4 }
int형 자료 4개를 저장 할 수 있는 메모리가 할당되므로
4 × 4 = 16바이트가 할당됩니다.
배열은 반드시 실행전에 크기를 결정해주어야 합니다.
---------------------------------------------------------
메모리 동적할당을 하기 위해
함수를 사용하는데
malloc이라는 함수를 사용합니다.
memory allocation의 줄임말 입니다.
---------------------------------------------------------
malloc 함수의 원형을 살펴보면
반환형은 보이드 포인터
입력값은 할당될 메모리의 크기를 넣어줍니다.
---------------------------------------------------------
malloc함수를 사용하기 위해서
#include <stdlib.h>
stdlib 헤더파일이 필요합니다.
standard library 의 줄임말 입니다.
---------------------------------------------------------
메모리 동적 할당 코드의
예를 하나 보면
대입연산자의 오른쪽 부터
malloc함수를 사용하고 입력값으로
sizeof(int) 곱하기 7로
Int형 자료 크기 곱하기 7 만큼 메모리를 할당 합니다.
즉 4 곱하기 7 인
28바이트 만큼 메모리를 할당하고
---------------------------------------------------------
malloc의 반환값이 void 포인터이기 때문에
malloc 함수 앞에
int형 포인터로 형 변환 해줍니다.
---------------------------------------------------------
왜냐하면 malloc은 반환형이 void 포인터 이기 때문에
왼쪽에 받아주는 포인터가 int형 포인터이므로
int형 포인터로 변환해주어야 제대로 대입이 됩니다.
---------------------------------------------------------
즉, 메모리 동적할당은
malloc 함수를 이용하여
힙 영역에 메모리 공간을 할당한 후
포인터가 가리키는 방식입니다.
---------------------------------------------------------
그림으로 나타내면 이런식으로 표현할 수 있습니다.
---------------------------------------------------------
그 다음은
동적할당된 메모리를 해제하는 방법을 알아 보겠습니다.
---------------------------------------------------------
메모리 동적 할당은
메모리를
프로그래머가 할당하고 관리 하는 것 이므로
---------------------------------------------------------
메모리를 할당하고
사용이 끝나서 필요가 없어지면
꼭 해제를 해주어야 합니다.
---------------------------------------------------------
그렇지 않으면
메모리 누수가 발생합니다.
---------------------------------------------------------
메모리 누수란
프로그램이
필요하지 않은 메모리를 계속 점유하고 있는 현상입니다.
---------------------------------------------------------
동적 할당 메모리 해제를 위한 함수는
free 함수이며
반환형이 void
입력값이 void 포인터 입니다.
---------------------------------------------------------
free는 자유롭게 하다 라는 뜻으로
즉, 할당된 메모리를 자유롭게 하여
해제 한다는 의미를 지니고 있습니다.
---------------------------------------------------------
위와 같이
int형 자료 7개 동적할당된 메모리를 해제 하기 위해
free함수를 호출하여
free(ptr1); 해주었을 경우
---------------------------------------------------------
메모리가 해제되고 나면
힙공간에 있는 메모리가 해제되어
포인터 ptr1만 남습니다.
---------------------------------------------------------
'C_프로그래밍' 카테고리의 다른 글
[C 프로그래밍] 44장. 매크로 (상수, 함수) (0) | 2020.04.08 |
---|---|
[C 프로그래밍] 43장. 동적할당(2) (0) | 2020.04.07 |
[C 프로그래밍] 41장. 구조체 포인터 (0) | 2020.04.07 |
[C 프로그래밍] 40장. 구조체 배열 (0) | 2020.04.07 |
[C 프로그래밍] 39장. 구조체 (0) | 2020.04.06 |