본문 바로가기
c++

[C++]동적 메모리 할당 및 반환(new, delete )

by goblin- 2023. 1. 30.

데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임(compile time)에 미리 결정하게 된다. 하지만 힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임(run time)에 사용자가 직접 결정하게 된다. 이렇게 런 타임에 메모리를 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 한다.

 

데이터(data) 영역

데이터 영역은 프로그램의 전역변수와 정적(state) 변수가 저장되는 영역이다. 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸한다.

 

힙(heap) 영역

힙 영역은 프로그래머가 직접공간을 할당, 해제하는 메모리 공간이다. 힙영역에서 malloc()또는 new 연산자를 통해 메모리를 할당하고, free() 또는 delete 연산자를 통해 메모리를 해제한다. (선입선출)

 

스택(stack) 영역

스택영역은 프로그램이 자동으로 사용하는 임시 메모리 영역이다. 함수호출시 생성되는 지역변수와 매개변수가 저장되는 영역이고, 함수 호출이 완료되면 사라진다. (후입선출)

 

#include <iostream>
#include <string.h>
using namespace std;

char *MakeStrAdr(int len){
    char *str=new char[len];
    return str;
}

int main(void){
    char *str=MakeStrAdr(20);
    strcpy(str, "I am so happy~");
    cout<<str<<endl;
    delete []str;
    return 0;
}

결과

I am so happy~

 

위의 코드 중 char *str=new char [len];  을 보면 new 연산자를 통하여 메모리를 할당받았다. 메인 함수에서 함수 MakeStrAdr()의 len에 20을 넣었기 때문에 20메모리를 할당된다. 또한 delete [] str; 에서 delete 연산자를 통해 메모리를 해제하였다.(len의 길이가 1 이상일 경우 []를 붙여줘야 메모리 전체가 해제된다.)

 

동적메모리란 new, delete 연산자를 통하여 데이터를 할당하고 해제하는 메모리를 의미한다.