Ch 10. 범위, 공간 - 03. 공간 기억 부류(자동, 정적, 동적)

2025. 4. 29. 12:17Programming Language/C++

반응형

1. 공간(Storage)

공간은 변수가 메모리에 얼마나 오래 살아 있는지, 어디에 저장되는지를 결정하는 것을 분류해둔 것이다.

이 공간은 자동 저장공간, 정적 저장공간, 동적 저장공간으로 나눌 수 있다.

 

2. 자동 저장공간 (Automatic Storage)

자동 저장공간은 함수 호출 시 생성되고 함수가 종료되면 소멸되고 메모리에서는 스택(stack)영역에 저장된다.

void func() {
    int x = 10; // 자동 저장공간에 저장
}// 종료될때 x는 자동 저장공간에서 해제됨

x는 func()가 호출될 때 스택에 메모리 잡히게 되고 func()가 끝나면 자동으로 스택에서 메모리 해제됨

 

자동 저장공간은 보이는것 처럼 따로 메모리를 할당하거나 지울 필요가 없으며 보통 일반 지역 변수는 다 자동 저장공간에 저장되게 된다.

 

3. 정적 저장공간 (Static Storage)

정적 저장공간은 프로그램 시작 시 생성되고 프로그램이 종료될때 소멸되고 이는 데이터(Data)영역에 저장된다.

int globalVar = 5; // 전역 변수 → 정적 저장공간

void func() {
    static int counter = 0; // static 지역변수 → 정적 저장공간
    counter++;
}

 

globalVar는 프로그램 시작할 때 메모리에 올라오고 counter도 처음 func가 호출될 때 한 번만 초기화되고, 이후 계속 유지된다

전역 변수, static 지역변수, static 멤버변수 모두 이 범주에 들어간다.

 

4. 동적 저장공간 (Dynamic Storage)

사용자가 직접 new 키워드를 사용해서 생성되고 delete를 사용해서 소멸시키고 이는 힙(Heap)영역에 저장된다.

void func() {
    int* ptr = new int(5); // 동적 저장공간

    delete ptr; // 수동으로 메모리 해제
}

 

new키워드를 사용하면 힙 메모리에서 공간이 할당되고 delete로 직접 메모리를 반납해야 한다.

이는 개발하는 주체가 직접메모리를 관리해줘야만 한다.

이때 메모리 공간의 할당은 new 키워드로 사용하고 이를 받기 위해서는 무조건 포인터를 사용해줘야만 한다.

그리고 이때 할당 공간이 delete로 해제 될때 뎅글링 포인터가 되지 않도록 관리를 잘 해줘야만 한다라는 점을 알고 있어야만 한다

반응형