작성
·
87
1
안녕하세요?
수업시간에 static int와 int의 차이에 대해서 설명을 해주셨습니다.
저도 int a와 static int a를 통해서 값 변화를 확인했고요.
그런데 메모리를 계속 새로 할당받으면 메모리 주소가 바뀔 것이라고 생각해서 &a를 통해서 확인해보려고 하는데, int a로 해도 메모리 주소가 계속 같습니다.
혹시 제가 생각한 방향이 잘못된 것인지 여쭤보고 싶습니다.
void doSomething()
{
int a = 1; // 계속 메모리를 새로 할당받음.
a++;
std::cout << &a << std::endl;
}
int main()
{
doSomething();
doSomething();
doSomething();
doSomething();
}
제 코드에서는 돌렸을 때, 계속 같은 값이 나오고 있습니다.
답변 2
2
안녕하세요? 질문&답변 도우미 Soobak 입니다.
이해하신 내용들과 생각하신 방향성 모두 문법과 개념적으로 정확하십니다.
다만, 컴파일러가 스택 메모리와 관련된 최적화를 진행하여 다음 함수 호출시에도 동일한 주소를 할당 받도록 하여 재사용하도록 하는 것입니다.
컴파일러 최적화를 고려했을 때 일반적으로 정상적인 동작입니다.
꼼꼼하게 다방면으로 생각해보시면서 직접 실행해보시는 부분이 인상 깊네요! 화이팅입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김동현님, 질문 주셔서 감사합니다.
로컬 변수 int a
는 함수 doSomething
이 호출될 때마다 스택에 할당됩니다. 일반적으로 함수 호출이 반복되면, 변수 a
의 메모리 주소가 달라질 수도 있지만, 동일한 실행 경로에서 호출되는 함수의 경우 스택 프레임이 동일한 위치에 할당될 가능성이 높습니다. 이는 컴파일러가 스택 할당을 어떻게 최적화하느냐에 따라 다릅니다.
관련해서는 다음 게시물도 참고해 보세요: 정적변수 강의에서 Static, Const static 질문입니다. 구체적으로 스택과 정적 변수의 차이에 대한 질문과 함께 이러한 메모리 동작이 설명되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.