C++

C++) 동적 할당

zzugest1 2025. 1. 6. 23:41

동적할당 :  프로그램 실행 중에 메모리를 할당하는 방법을 의미한다. 주로 new 구문을 이용.

 

int main()
{
    for (int i = 0; i < 10; i
    {
        int temp = i;        
        cout << temp << endl;
    } 
}

이 경우의 변수 temp는 루프문이 실행될 떄마다 할당되는 것이 아니라, 이미 할당이 완료된 상황에서 매 루프마다 다시 초기화되는 것에 불과하다는 의미 -> 컴파일러가 코드를 해독하고 나서 프로그램을 만들 떄 이미 변수를 할당했다는 것이다.
이는 조건문 등으로 인해 실제로 이 코드가 실행되는 일이 없다 할 지라도 무조건 컴파일러가 할당하게 된다. 따라서 경우에 따라서는 만들었음에도 쓰이지 않는 변수가 될 수 있다.

 

 

int main()
{
    int* temp;
    for (int i = 0; i < 10; i
    {
        temp = new int(i);   
        cout << *temp << " : " << temp << endl;
        delete temp;
    } 
}

 

그런데 이번엔 포인터로서 만들고, 할당하는 주소 대신 new int(i)라는 구문을 넣었더니 위와 변수의 값은 동일한데 주소가 전혀 다른 변수들이 생성되어 출력되는 걸 확인할 수 있었다. 바로 이 new 구문이 동적 할당 전용 키워드이다. i라는 값을 가진 int 변수를 동적 할당하여, 그 주소를 temp에 저장한다는 뜻이다. 

 


기존에 동적 할당이 아니라 그냥 할당했던 변수들의 경우엔 사용이 끝난 변수는 그 사용이 끝난 시점에서 컴파일러가 더 이상 사용하지 않는다 판단하여 알아서 할당을 해제해 다른 용도로 쓸 수 있게 해준다. 하지만 동적 할당은 컴파일 단계가 아닌 실행파일 실행 단계에서 주소가 할당되기 떄문에 이미 이 시점에서 컴파일러는 프로그램에서 손 뗀지 오래라 이를 예측해 작업한다는 게 불가능하다. 따라서, 이렇게 동적 할당된 것을 접근할 수 없게 되기 전에 지워두지 않으면 프로그램 내부에 항상 상주하게 되어 시스템의 남은 자원을 계속해서 잡아먹게 되고 다른 작업에 사용할 수 있는 자원이 그만큼 줄어들게 되는 것. 이를 "메모리 누수"라고 한다. 이를 막기 위해 동적 할당된 변수를 delete를 이용해 할당 해제를 해야 한다.

'C++' 카테고리의 다른 글

C++) 상속  (0) 2025.01.10
C++) 클래스(Class)  (0) 2025.01.08
C++) 포인터(Pointer)  (0) 2025.01.06
C++) 인터페이스(Interface)  (0) 2024.12.26
C++) 템플릿(Template)  (0) 2024.12.26