[KOCW 한국산업기술대학교 박정민 교수님] C 프로그래밍 18강

MinWoo Park·2021년 9월 1일
0

KOCW

목록 보기
18/19
post-thumbnail

Part18 동적 메모리 할당과 가변 인자

18.1 동적 메모리 할당

프로그램에서 사용되는 메모리는 정적 메모리동적 메모리가 있습니다.
정적 메모리는 언제 할당되고 해제될지 그리고 크기가 컴파일할 때 결정되는 메모리입니다.
런타임 중에 메모리의 크기를 변경할 수 없어 이러한 문제를 해결하기 위해 동적 메모리가 요구됩니다.

프로세스의 메모리 공간

  • 코드, 스택, 데이터 영역은 컴파일러가 자동으로 메모리 생성 및 해제
  • 힙 영역은 프로그래머가 관리

동적 메모리 할당의 필요성

  • 프로그래머가 필요한 메모리 크기를 예측할 수 없을 때 필요
    ex) 배열 사용 시 배열 요소 수를 5개 지정했는데 3개만 사용하면 낭비가 되고 7개를 사용하면 메모리가 부족해서 에러가 발생함
  • 런타임 중 동적 메모리 할당을 요구해서 할당이 이루어지면 힙 영역에 메모리가 할당됨
  • 동적 메모리는 포인터를 통해 접근할 수 있음

18.2 동적 메모리 할당 함수, 해제 함수 그리고 가변 인자

malloc() 함수와 free() 함수

  • 헤더 파일: stdlib.h
  • malloc(): Memory Allcoation
    void* malloc(size_t size)
    호출 성공 시 메모리의 시작 주소 반환, 호출 실패 시 NULL을 반환
    인자로는 0보다 큰 정수를 입력
  • free():
    void free(void* p)
    동적 메모리가 할당된 공간을 해제

calloc() 함수

  • 헤더 파일: stdlib.h
  • Clear Allocation
  • void* calloc(size_t num, size_t size)
  • malloc() 함수와 같은 기능을 하나 사용법만 약간 다름
    인자가 2개이며 첫 번째 인자는 num 갯수, 두 번째 인자는 크기 size
    총 num * size만큼 크기를 할당

ralloc() 함수

  • 헤더 파일: stdlib.h
  • Re-Allocation
  • 함수 원형: void realloc(void p, size_t size)
  • 동적 메모리로 할당되어 있는 영역에서 size만큼 재할당

가변인자(Variable argument)

  • 함수에 들어가는 인자의 개수가 변하는 것을 가변 인자라고 함
  • 함수에서 인자로 받을 때는 ... 으로 받음

Reference
강의: 박정민, 『C 프로그래밍』, KOCW 한국산업기술대학교, 18강
교재: 박정민, 『열혈강의 C 언어 본색 명강의가 일으키는 C 언어 기적』, 프리렉 (2011), p621-649.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글