• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

메모리 할당에 관하여

23.10.20 16:52 작성 조회수 138

1

변수의 메모리 할당은 언제 이루어지는 건가요?

 

  1. 변수를 선언하면 쓰레기값으로 초기화되는 건가요? 이 경우 선언 즉시 메모리가 할당되는 게 맞는지도 궁금합니다.

  2. 혹은 사용자가 선언 및 초기화 시에 메모리 할당이 이루어지는 걸까요?

  3. 혹은 해당 변수에 무언가 대입되어야 메모리 할당이 이루어지는 건가요?

     

답변 2

·

답변을 작성해보세요.

1

수박님께서 7.10 강의 안내를 잘 해주셨는데,

스택 메모리는 프로그램이 실행될 때 미리 잡아놓고 프로그램이 끝날때까지 계속 사용합니다.

(힙 메모리는 동적으로 사용)

스택을 사용하는 지역 변수는 그때그때 메모리 자체를 운영체제에게 동적으로 받아오는 것은 아닙니다. 이미 가지고 있는 스택 메모리에서 특정 공간을 그 변수 이름으로 사용할 수 있게 해주는 것입니다. 모든 변수에 대한 메모리를 그때그때 동적할당으로 받아오면 너무 느리기 때문에 시작할때 어느정도 메모리를 미리 잡아놓고 시작합니다. 반대로 아마 들어보셨을텐데 스택오버플로우 같은 경우는 미리 잡아 놓은 메모리보다 더 많은 메모리를 사용하는 경우(예: 무한 재귀 호출)에 발생하는 문제입니다.

함수의 영역을 벗어나면 지역 변수의 이름을 사용할 수 없게 되는 것이지 그 변수가 사용하던 스택 메모리 자체가 해제(deallocate, 운영체제에게 돌려주는 것)되는 것은 아닙니다.

함수 영역으로 들어왔을때 지역 변수가 특정 메모리를 사용할 수 있게 "할당" 해주는 것은 의미상으로는 맞습니다만 그때그때 동적 할당을 받는 것은 아니고 이미 프로그램이 가지고 있는 메모리에서 받아오는 것이기 때문에 빠릅니다. (동적 할당은 운영체제가 어느 메모리를 줄 지 찾아서 줘야 하기 때문에 느리지요.)

이 강의는 C++ 문법 자체도 다룰 내용이 많다 보니 메모리 관련된 내용들은 C언어 강의에서 더 자세하게 다루었습니다.

아래 웹 가시화 도구에서 간단한 프로그램을 실행해보시면 스택 메모리가 어떻게 사용되는지 확인하기 편합니다. 

https://pythontutor.com/cpp.html#mode=edit

 

0

Soobak님의 프로필

Soobak

2023.10.20

안녕하세요, 답변 도우미 Soobak 입니다.

 

변수의 유형과 선언 방식에 따라서 달라진다고 답변드리는 것이 적절한 것 같습니다.

  • 지역 변수 (Local Variables)


    : 선언된 함수가 호출될 때 스택 이라고 불리는 메모리 영역에 할당되고, 함수가 종료될 때 해제됩니다.
    (수정) 위 교수님의 답변을 참고해주시면 감사하겠습니다. 잘못된 답변으로 혼동을 드려 죄송합니다.

     

  • 전역 변수 (Global Variables)


    : 프로그램이 시작될 때 데이터 세그먼트 라고 불리는 메모리 영역에 할당되고, 프로그램이 종료될 때 까지 유지됩니다.


     

  • 정적 변수 (Static Variables)


    : 지역 변수로 선언될 경우 해당 함수가 호출될 때 한 번만 초기화되며, 함수가 종료되더라도 메모리에서 해제되지 않습니다.

     

  • 동적 메모리 할당 (Dynamic Memory Allocation)


    : new 키워드를 통해 이라고 불리는 메모리 영역에 할당되고, delete 키워드를 통해 할당이 해제됩니다.


보다 자세한 내용은 강의 전반에 걸쳐서 자세하게 학습하시게 됩니다.
또한, 강의 7.10 스택과 힙 the stack and the heap 에서 메모리 영역에 대해 교수님께서 자세히 설명해주시니, 해당 강의만 잠시 참고해보시는 것도 추천드립니다.