동적 메모리 관리, 동적 메모리 할당

(2023-10-06)

동적 메모리 관리 함수, malloc, calloc, free(), C 메모리 할당


1. 동적 메모리 관리(할당,해제)컴파일메모리 공간을 확정하지 않고, 실행시 동적으로 처리
     - 원하는 시점에 원하는 만큼의 메모리 할당 처리

  ㅇ [참고]  실행 관점에서, 메모리 상에 일시적으로 데이터를 기억해두는 영역의 구분
     - 스택 메모리 : auto 자동 변수일 경우, 스택 메모리에 생성됨 (동적 자동 메모리)
     - 힙 메모리 : malloc 함수의 경우, 힙 메모리에 생성됨 (동적 메모리 할당)


2. [C 언어]  동적 메모리 관리(할당,해제) 함수  :  (stdlib.h 헤더파일)
     
  ㅇ malloc()  : 실행중에 동적으로, 1개 값 형식으로, 메모리 공간(힙 메모리)을 할당 
     - 인수 : 할당할 메모리 크기를, 바이트 수로 전달
     - 반환 : (성공시) 할당된 메모리 공간의 첫 바이트의 포인터를 반환 (void *)
        . (실패시) 만일, 메모리 부족 등으로 할당 실패시, NULL을 반환
        . 항상, (void *)을 반환하므로, 캐스트 연산자 `(자료형)`를 써야 함
     - 변경 : 못함
        . 한 번 할당된 공간 크기는 안 바꿈
        . 즉, 할당 만 가능, 초기화/변경은 할 수 없음

     - 例)  포인터 = (자료형) malloc(크기)
        . (int *) malloc (100*sizeof(int)); // 100개 정수 크기(통상,4)의 바이트 수
        . (float *) malloc (sizeof(float)); // 1개 실수 크기(통상,4)의 바이트 수

  ㅇ calloc()  : malloc과 유사하나, 2개 값 형식으로, 메모리 공간을 할당
     - 인수 : (개수,사이즈) 형식으로 전달받으며, 할당된 공간의 값을 모두 0으로 초기화
        . 따라서, 배열을 할당하고, 이를 모두 0으로 초기화 할 때는, calloc를 쓰면 편함

  ㅇ free()    : 이전 할당된 메모리 공간의 해제

  ㅇ realloc() : 이전 할당된 메모리 공간 크기 조정


3. [C++ 언어]  동적 메모리 관리(할당,해제) 연산자C 언어와 달리, 동적 메모리 할당/해제를 함수가 아닌 연산자를 사용
     - C 언어는, malloc()/free() 함수를 사용
        . 한편, malloc()은 할당 만 가능, 초기값 부여는 불가
     - C++ 언어는, 연산자를 사용하므로, 굳이 별도 헤더 파일(stdlib.h)을 포함시킬 필요 없음
        . new 및 delete 연산자

  ㅇ (할당 형식) : 포인터 = new 자료형(초기값);
     - 지정한 자료형의 크기 만큼 메모리를 할당하여 그 위치를 가리키는 포인터를 리턴(반환)함
     - 할당 실패시에는, NULL 값을 리턴함
     - 만일, 할당과 동시에 초기화하려면, 자료형 뒤 괄호()를 부가하여 그 안에 초기값을 지정함
     - 한편, C 언어의 malloc 함수는, 초기화는 할 수 없고, 할당 만 가능

  ㅇ (해제 형식) : delete (new가 리턴한 포인터);

C 함수
   1. C 함수   2. C 함수 종류   3. C 문자열 함수   4. C 동적 메모리 관리 함수   5. C 파일 처리 함수   6. C 파일 포인터  


Copyrightⓒ written by 차재복 (Cha Jae Bok)       기술용어해설소액후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"