카테고리 없음

[c언어] 메모리 동적할당

FORHAPPy 2021. 9. 30. 12:39

동적할당이란?

 

데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임(compile time)에 미리 결정됩니다.

하지만 힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임(run time)에 사용자가 직접 결정하게 됩니다.

이렇게 런 타임에 메모리를 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 합니다.

 

 

malloc() 함수

#include <stdlib.h>
void *malloc(size_t size);  
  1. 할당하고자하는 메모리 크기를 바이트 단위로 전달받는다.
  2. 함수가 실행되면 메모리공간을 찾는다. 
  3. 이렇게 찾은 메모리공간의 첫번째 바이트 공간을 가리키는 주솟값을 반환한다.
  4. 공간을 찾지 못할 경우 널포인터를 반환한다.
  5. 주솟값을 반환받기 떄문에 메모리공간에 접근하려면 포인터를 사용해야한다.
  6. free()함수를 통해 할당받은 메모리를 해제해주어야한다.

 calloc() 함수

 

#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
  1. 메모리 크기를 두개의 인수로 나누어 전달받는다.
  2. 메모리를 할당받은 후에 해당 메모리의 모든 비트값을 전부 0으로 초기화해준다.
  3. 첫번쨰 인수는 메모리 블록의 개수, 두번째 인수는 각 블록의 바이트 수이다. 

 

예시

 

1. ptr_arr = (int*) malloc(arr_len * sizeof(int));
2. ptr_arr = (int*) calloc(arr_len, sizeof(int));

 

위의 예제는 똑같은 동작을 수행한다.

 

 

 

 

 

 

 

개념 [참조]

 

코딩의 시작, TCP School

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com