투케이2K

34. (C/C언어) 메모리 동적 할당 , malloc 함수 , free 함수 , calloc 함수 , realloc 함수 설명 본문

C

34. (C/C언어) 메모리 동적 할당 , malloc 함수 , free 함수 , calloc 함수 , realloc 함수 설명

투케이2K 2021. 2. 4. 03:39

/* =========================== */

[ 개발 환경 설정 ]

​개발 툴 : VisualStudio

개발 언어 : C언어

/* =========================== */

/* =========================== */

[메모리 동적 할당 이란?]

- 메모리의 동적 할당(dynamic allocation) 이란 런 타임 (프로그램이 실행되는 도중인 상태) 에 메모리를 할당받는 것입니다

[malloc() 함수 란?]

- malloc() 함수는 프로그램이 실행 중일 때 사용자가 직접 힙 영역에 메모리를 할당할 수 있게 해주는 것입니다

- malloc() 함수는 인수로 할당받고자 하는 메모리의 크기를 바이트 단위로 전달받습니다

- malloc() 함수는 전달받은 메모리크기에 맞고, 아직할당되지 않은 적당한 블록을 찾은 후 블록의 첫 번째 바이트를 가리키는 주소값을 반환합니다

- malloc() 함수는 힙 영역에 할당할 수 있는 적당한 블록이 없을 때에는 널 포인터를 반환합니다

- malloc() 함수는 주소값을 반환받기 때문에 힙 영역에 할당된 메모리 공간으로 접근하려면 포인터를 사용해야 합니다

- malloc() 함수는 함수의 원형에서 볼 수 있는 size_t 타입은 부호없는 정수라고 이해하면 됩니다

[free() 함수 란?]

- free() 함수는 힙 영역에 할당받은 메모리 공간을 다시 운영체제로 반환해 주는 함수입니다

- free() 함수는 데이터 영역이나 스택 영역에 할당되는 메모리의 크기는 컴파일 타임에 결정되어, 프로그램이 실행되는 내내 고정됩니다

- free() 함수는 다 사용한 메모리를 해제해 주지 않으면, 메모리가 부족해지는 현상이 발생할 수 있습니다

- free() 함수는 인수로 해제하고자 하는 메모리 공간을 가리키는 포인터를 전달받습니다

- free() 함수에서 사용이 끝난 메모리를 해제하지 않아서 메모리가 부족해지는 현상을 메모리 누수(memory leak)라고 합니다

[calloc() 함수 란?]

- calloc() 함수는 malloc() 함수와 마찬가지로 힙 영역에 메모리를 동적으로 할당해주는 함수입니다

- malloc() 함수와 다른 점은 할당하고자 하는 메모리의 크기를 두 개의 인수로 나누어 전달받습니다

- calloc() 함수는 메모리를 할당받은 후에 해당 메모리의 모든 비트값을 전부 0으로 초기화해 줍니다

- calloc() 함수도 malloc() 함수와 마찬가지로 free() 함수를 통해 할당받은 메모리를 해제해 주어야 합니다

[realloc() 함수 란?]

- realloc() 함수는 이미 할당된 메모리의 크기를 바꾸어 재할당할 때 사용하는 함수입니다

- realloc() 함수의 첫 번째 인수는 크기를 바꾸고자 하는 메모리 공간을 가리키는 포인터를 전달받고, 두 번째 인수로는 해당 메모리 공간에 재할당할 크기를 전달합니다

- realloc() 함수는 만약 기존의 메모리 위치에 충분한 공간이 있다면 바로 이어서 추가 메모리 공간을 할당해 줍니다

- realloc() 함수는 기존의 메모리 위치에 충분한 공간이 없으면 메모리의 다른 공간에 기존의 데이터를 복사한 후, 이어서 추가 메모리 공간을 할당하게 됩니다

/* =========================== */

반응형
Comments