본문 바로가기
C_프로그래밍

[C 프로그래밍] 42장. 동적할당(1)

by 팔공산호랑이 2020. 4. 7.

---------------------------------------------------------

---------------------------------------------------------

 

메모리 동적할당이란

메모리를 동적으로 할당하는 것을 말하며

다이나믹 메모리 얼로케이션이라고 합니다.

---------------------------------------------------------

메모리 동적할당이란

프로그래머가 관리하는 메모리인 공간에

메모리가 할당되는것을 말합니다.

---------------------------------------------------------

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만 남습니다.

---------------------------------------------------------