면접으로 좋은 내용들

자동공간, 정적공간, 동적공간

Mirab 2023. 3. 1. 22:05

최근 C++ 로 공부하고 있어 C++ 문법 기준으로 작성함을 알려드립니다. (_ _)

 

면접에서 한 번 질문받았던 내용입니다.

 ~ 님 혹시 자동공간, 정적공간, 동적공간에 대해서 아시나요?

그때는 첫 면접이라 아는 건 엄청 많았는데,, 설명을 너무너무 못했습니다. (따흑..)

면접 끝난 후에 복귀하면서 이렇게 쉽게 설명할 수 있는걸! 하는 기억에..

이번에 좀 자세하게 작성해서 또 같은 실수를 반복하지 않도록 방지하고자 작성합니다.

 

여러분은 아시나요?

한 번 생각해보시고 아래로 와주세요.

 

 

C++ 에서는 데이터를 저장해 두기 위한 메모리를, 대입하는 방법에 따라 3가지로 구분합니다.

자동 공간(Automatic storage), 동의어로는 자유 공간 혹은 힙(heap)이라고 하네요.

정적 공간(Static storage)

동적 공간(Dynamic storage)

자동 공간

많이들 사용했을 겁니다.

함수 안에서 정의되는 보통의 변수들을 자동 변수라고 합니다.

자동 변수들이 자신의 정의되어 있는 함수가 호출되는 순간에 자동으로 생겨나 그 함수가 종료되는 시점까지만 존재한다라고 해서 자동 변수입니다.

 

이러한 자동 변수들은 자신들을 포함하고 있는 블록 안에서만 유효하고 블록을 벗어난 공간에서는 소멸합니다.

 

메모리적인 측면에서는 어디 공간에 존재할까요? 바로 스택에 저장됩니다.

스택은 그 값이 순차적으로 저장되고, 역순으로 해제되는 특징이 있어 프로그램이 실행하는 동안 늘었다가 줄었다가 반복하면서 관리됩니다. (대부분 변수들을 선언해서 잠깐 사용하고, 블록을 벗어나면 접근할 수 없습니다.)

정적 공간

프로그램이 실행되는 동안에 지속적으로 존재하는 공간을 말합니다.

만드는 방법은 2가지인데요.

첫 번째로 전역 변수를 선언하는 겁니다.

두 번째로 static 키워드를 사용해서 선언한 변수입니다.

언제 어디서나 접근할 수 있지만, 결국 프로그램이 종료되면 같이 소멸됩니다.

 

메모리적인 측면에서는 데이터 영역에 존재합니다.

이렇게 보면 모든 공부는 하나로 연결되는 것처럼 느껴지네요. (언젠간 나도 그러겠지..)

동적 공간 (자유 공간, 힙)

C++ 의 꽃이라고 할 수 있는 공간입니다.

new와 delete 연산자를 사용해서 프로그램 실행 동안에 자유롭게 빈 공간을 찾아 메모리를 할당해서 사용합니다.

이러한 공간이 바로 동적 공간입니다.

 

동적 공간은 런타임에 필요한 만큼 생성해서 사용하고, 필요 없을 때 해제하는 자유자재로 할 수 있는 공간입니다.

 

데이터의 수명은 프로그램의 수명이나 함수의 수명에 얽매이지 않습니다.

프로그래머의 delete를 사용하냐에 따라 수명이 달라집니다.

다만, delete 를 사용하지 않게 되면 계속해서 살아남게 되고 그곳에 접근할 수 있는 유일한 포인터를 잃어버리게 된다면 그 공간에 접근할 수 없습니다.

이를 메모리 누수(memory leak)이라고 하며, 이게 계속 계속 누적된다면 사용하지는 않는데 메모리만 잔뜩 먹게 되는 프로그램이 되는 것이죠.

 

반드시 new와 delete는 짝꿍처럼 다녀야 합니다.

 

메모리적인 측면에서는 Heap 영역에 존재합니다.

데이터의 크기가 확실하지 않고 변동이 있기 때문에 Heap이라는 공간에서 메모리를 할당해 사용을 하고, 사용하지 않을 때는 반드시 해제를 해야 합니다. (해제할 때도 2번 해제하면 정의되지 않은 행동이라고 하여 위험합니다.)

 

제일 중요한 건 개발할 때,

변수들의 특징을 잘 알고 사용하면 조금 더 효율적인 프로그램이 될 것 같습니다.