본문 바로가기
KNOU/요약정리

[C 프로그래밍] 메모리 동적 할당

by bottlesun 2023. 5. 10.
728x90

C언어 에서의 기억공간

프로그램의 실행을 위해 기억공간이 필요

운영체제에서 할당

할당되는 기억공간의 영역

  • 데이터
  • 스택

기억 공간의 확보 방법

  • 메모리 정적 할당(Static Allocation)

프로그램의 작성 단계에서 크기 결정

데이터 영역과 스택 영역을 이용

변수선언 등 할당 시켜야 할 기억공간의 크기를 알고 있을 경우 사용

미리 크기를 고정하여 사용

에러 발생 확률이 적다, 기억공간의 낭비가 심할 수 있다.

  • 메모리 동적 할당(Dynamic Allocation)

기억공간의 힙 영역 이용

프로그램 실행 과정에서 크기가 할당이 된다.

많은 자료를 처리하는 배열의 크기를 실행시간에 정의해야할 경우 유용

크기를 실행시 지정하고 재조정이 가능하다.

실행 시간이 걸릴 수 있다. (단점)

기억공간의 할당 영역

구분 설명

데이터 영역 전역변수와 static 변수가 저장 되는 영역
힙 영역 프로그래머의 필요에 의해 할당/소멸이 이루어지는 영역
스택 영역 지역변수와 매개변수가 저장되는 영역

데이터영역

프로그램이 시작함과 동시에 할당 되고, 종료 되면 소멸

힙 영역

실행 되면서 크기가 늘어나고 줄어들어 자유 기억공간이라고 불린다

메모리 동적 할당에 사용되는 영역

스택영역

함수 호출이 완료 되면 사라지게 된다.

메모리 동적할당 순서

  1. 기억공간을 동적으로 할당 받을 변수를 포인터를 이용하여 선언
  2. malloc() 함수 등을 이용하여 기억공간을 동적으로 할당
  3. 기억공간의 사용이 끝나면 free() 함수를 이용하여 기억공간 해제가 필요

메모리 동적할당 함수

       
함수이름 설명 인자 반환값
malloc() 동적으로 메모리 공간을 할당하는 함수입니다. 할당할 바이트 수를 인자로 받아서 할당된 메모리 공간의 첫 번째 바이트의 주소를 반환합니다. size_t size 할당된 메모리 공간의 첫 번째 바이트의 주소 (void* 타입)
calloc() 동적으로 메모리 공간을 할당하고, 할당된 메모리 공간을 모두 0으로 초기화하는 함수입니다. 할당할 바이트 수와 초기화할 바이트의 값(0)을 인자로 받아서 할당된 메모리 공간의 첫 번째 바이트의 주소를 반환합니다. size_t num, size_t size 할당된 메모리 공간의 첫 번째 바이트의 주소 (void* 타입)
realloc() 이미 할당된 메모리 공간의 크기를 변경하는 함수입니다. 이전에 할당된 메모리 공간의 포인터와 변경할 크기를 인자로 받아서, 새로운 크기로 메모리 공간을 할당하고 이전에 할당된 메모리 내용을 새로운 공간으로 복사합니다. 만약 인자로 받은 포인터가 NULL이면, malloc()과 동일하게 새로운 메모리 공간을 할당합니다. void* ptr, size_t size 새로운 메모리 공간의 첫 번째 바이트의 주소 (void* 타입)
free() 이미 할당된 메모리 공간을 해제하는 함수입니다. 인자로 받은 메모리 공간을 해제합니다. void* ptr 없음
728x90

댓글