Rylah's Study & Daily Life

Modern C++ : 01. Memory Structure - Stack Memory 본문

Study/C++

Modern C++ : 01. Memory Structure - Stack Memory

Rylah 2022. 2. 3. 10:28
#include <iostream>
void foo(int arg)
{
	int a;
	int b;

}

void bar()
{
	Cat cat;
	Dog dog;
}
int main() {
	int a; 
	double b;

	foo(10);
	bar();

	return 0;
}

1. main 함수가 StackFrame에 올라간다.

2. foo 함수가 StackFrame에 들어간다.

foo가 종료될때 Return Address를 통해 어디로 가야할지 정하고 foo로 할당된 StackFrame 메모리를 해제한다.

#include <iostream>
class Cat
{
public:
	Cat()
	{
		m_age = 1;
	};
	~Cat();
	void addAge(int arg)
	{
		m_age += arg;
	}
private:
	int m_age;
};

int main() {

	Cat cat;
	cat.addAge(10);
	

	return 0;
}

1. main 함수 실행

2. Cat cat 개체 생성으로 인한 생성자 호출 cat.age = 1

3. cat::Addage() 멤버 함수 호출 return address를 제일 위에 가지며 arg로 넘겨받은 인자와 가장 아래에 객체 자신을 가리키는 this 포인터 주소를 가지는 구조를 갖는다.

 

4. addAge(10)이 끝난 이후 값이 변경되었고 그 뒤에 실행되는 함수가 없으니 return으로 가기 전에 소멸자 ~Cat() 한번 메모리 위에 얹어져서 개체 소멸을 진행한다.

 

5. 프로그램이 종료된다.

 

 

StackFrame 함수 단위로 쌓이고 해제되고 반복되는 것이 C++ 프로그램이다.

 

출처 : https://youtu.be/Z21YL3Fnba0