투케이2K
34. (C/C언어) 메모리 동적 할당 , malloc 함수 , free 함수 , calloc 함수 , realloc 함수 설명 본문
/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : 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() 함수는 기존의 메모리 위치에 충분한 공간이 없으면 메모리의 다른 공간에 기존의 데이터를 복사한 후, 이어서 추가 메모리 공간을 할당하게 됩니다
/* =========================== */
'C' 카테고리의 다른 글
36. (C/C언어) 공용체 (union) , 열거체 (enum) 개념 설명 (0) | 2021.02.15 |
---|---|
35. (C/C언어) do while 문을 사용해서 1부터 10까지 순차적 합계 계산 실시 (0) | 2021.02.06 |
33. (C/C언어) 미리 정의된 매크로(predefined macro) 사용해 DATE, TIME, LINE, STDC_HOSTED 표시 (0) | 2021.02.03 |
32. (C/C언어) 미리 정의된 매크로(predefined macro) 개념 설명 (0) | 2021.02.03 |
31. (C/C언어) fgets , fputs 를 사용해서 문자열 입력 및 출력 실시 (0) | 2021.02.01 |