메모리 할당에 관하여
변수의 메모리 할당은 언제 이루어지는 건가요?
변수를 선언하면 쓰레기값으로 초기화되는 건가요? 이 경우 선언 즉시 메모리가 할당되는 게 맞는지도 궁금합니다.
혹은 사용자가 선언 및 초기화 시에 메모리 할당이 이루어지는 걸까요?
혹은 해당 변수에 무언가 대입되어야 메모리 할당이 이루어지는 건가요?
답변 2
1
수박님께서 7.10 강의 안내를 잘 해주셨는데,
스택 메모리는 프로그램이 실행될 때 미리 잡아놓고 프로그램이 끝날때까지 계속 사용합니다.
(힙 메모리는 동적으로 사용)
스택을 사용하는 지역 변수는 그때그때 메모리 자체를 운영체제에게 동적으로 받아오는 것은 아닙니다. 이미 가지고 있는 스택 메모리에서 특정 공간을 그 변수 이름으로 사용할 수 있게 해주는 것입니다. 모든 변수에 대한 메모리를 그때그때 동적할당으로 받아오면 너무 느리기 때문에 시작할때 어느정도 메모리를 미리 잡아놓고 시작합니다. 반대로 아마 들어보셨을텐데 스택오버플로우 같은 경우는 미리 잡아 놓은 메모리보다 더 많은 메모리를 사용하는 경우(예: 무한 재귀 호출)에 발생하는 문제입니다.
함수의 영역을 벗어나면 지역 변수의 이름을 사용할 수 없게 되는 것이지 그 변수가 사용하던 스택 메모리 자체가 해제(deallocate, 운영체제에게 돌려주는 것)되는 것은 아닙니다.
함수 영역으로 들어왔을때 지역 변수가 특정 메모리를 사용할 수 있게 "할당" 해주는 것은 의미상으로는 맞습니다만 그때그때 동적 할당을 받는 것은 아니고 이미 프로그램이 가지고 있는 메모리에서 받아오는 것이기 때문에 빠릅니다. (동적 할당은 운영체제가 어느 메모리를 줄 지 찾아서 줘야 하기 때문에 느리지요.)
이 강의는 C++ 문법 자체도 다룰 내용이 많다 보니 메모리 관련된 내용들은 C언어 강의에서 더 자세하게 다루었습니다.
아래 웹 가시화 도구에서 간단한 프로그램을 실행해보시면 스택 메모리가 어떻게 사용되는지 확인하기 편합니다.
https://pythontutor.com/cpp.html#mode=edit
0
안녕하세요, 답변 도우미 Soobak 입니다.
변수의 유형과 선언 방식에 따라서 달라진다고 답변드리는 것이 적절한 것 같습니다.
지역 변수 (Local Variables)
:선언된 함수가 호출될 때스택이라고 불리는 메모리 영역에 할당되고, 함수가 종료될 때 해제됩니다.
(수정) 위 교수님의 답변을 참고해주시면 감사하겠습니다. 잘못된 답변으로 혼동을 드려 죄송합니다.전역 변수 (Global Variables)
: 프로그램이 시작될 때데이터 세그먼트라고 불리는 메모리 영역에 할당되고, 프로그램이 종료될 때 까지 유지됩니다.정적 변수 (Static Variables)
: 지역 변수로 선언될 경우 해당 함수가 호출될 때 한 번만 초기화되며, 함수가 종료되더라도 메모리에서 해제되지 않습니다.동적 메모리 할당 (Dynamic Memory Allocation)
:new키워드를 통해힙이라고 불리는 메모리 영역에 할당되고,delete키워드를 통해 할당이 해제됩니다.
보다 자세한 내용은 강의 전반에 걸쳐서 자세하게 학습하시게 됩니다.
또한, 강의 7.10 스택과 힙 the stack and the heap 에서 메모리 영역에 대해 교수님께서 자세히 설명해주시니, 해당 강의만 잠시 참고해보시는 것도 추천드립니다.
강의자료는 어디서 받을 수 있죠?
1
22
2
교재 있나요?
1
140
2
11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)
1
93
3
using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다
1
103
2
cstr직접구현
0
117
3
BubbleSort
1
79
2
숙제 마지막 부분
1
80
2
강의와 똑같이 진행했는데 링킹 에러가 발생합니다.
1
96
2
수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??
1
165
2
공변반환형 관련 문의 드립니다.
1
92
2
170강 유니크 포인터에대해 질문있습니다
1
82
1
섹션 5 퀴즈의 답이 이상합니다
1
85
2
이중포인터와 배열이 이해가 안됩니다.
1
159
2
5분 17~5분 34초 객체 잘림 질문
1
80
1
Resource.h 코드 알려주세요
1
73
1
char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다
1
95
2
화면좌측 숫자 보이기
1
116
1
화면 좌측 숫자 보이기
0
68
1
처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??
1
139
3
46강 string 버퍼 질문입니다
1
82
2
프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.
1
125
2
[] 범위 검사시 assert 사용 관련 질문
1
92
2
Lecture 클래스 멤버변수 명명 관련
0
93
2
프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요
0
75
1





