📚책읽기

[C++] 동적할당(malloc)

공대 컴린이 2022. 4. 4. 21:30
728x90
  • 동적 할당
    • 동적 할당은 프로그램 실행 도중에(런타임 중) 사용자가 원하는 만큼 메모리를 요청할 수 있도록 한다.
      이때 사용하는 메모리 영역은 스택/데이터/ROM/힙 영역 중 힙(Heap) 메모리 영역이다.
      동적 할당은 원하는 메모리 크기를 힙 메모리 영역에서 할당하고 할당된 첫 번째 주소를 받아와서 어떤 목적으로 사용할지 포인터 캐스팅을 하면 된다.
// 1. 힙 영역에 100 byte 만큼의 메모리를 할당
// 2. 할당된 시작 주소를 pInt 포인터 변수에 저장
int* pInt = (int*)malloc(100);
    • (int*)와 같이 강제 포인터 캐스팅을 한 이유
      malloc(memory allocator)은 반환 타입이 void 포인터의 함수이다. void 포인터는 주소만을 저장하기 위한 목적으로만 사용되어 실제 원형 데이터를 분석할 순 없다. 따라서 원형을 어떻게 볼 지 캐스팅을 통해 결정해 준 것이다.

    • 동적 할당에서 중요한 개념!
      1. 런타임 중에 대응 가능하다.
      2. 사용자가 직접 관리해야 한다. (해제)
      - 메모리 할당에 대한 해제를 안 하고 프로그램을 종료하면, 메모리가 계속 사용된다고 체크되어 "메모리 누수"가 발생할 수 있으며 프로그램이 강제 종료되는 경우도 있다.

    • 메모리 해제 방법
int* pInt = (int*)malloc(100); // 메모리 할당
if(nullptr != pInt)
{
	free(pInt); // 메모리 해제
}

 

728x90