새소식

💻 Programming (프로그래밍)/C++

[C++] 콜 스택 (Call Stack)

  • -

Q) 콜스택이 무엇인가요?

A) 프로그램을 작동 시킬때, 스택(Stack)이란 자료구조를 사용합니다.

컴퓨터에선, 주로 Source(Text), Data, Heap, Stack 메모리 구조로 이루어져있습니다.

 

이때 Stack에는 컴파일이 진행되고 매개변수, 지역변수, 반환 주소에 대한 정보들이 담기게 됩니다.

이때의 콜스택에 들어가는 데이터 자체 모두 다 Stack Frame 이라 불리웁니다.

 

Stack Frame

  • 함수가 종료되면 복귀할 주소
  • 함수의 모든 매개변수
  • 지역 변수
  • 반환할 때 복원해야하는 레지스터의 복사본(레지스터, 프로세서에 위치한 고속 메모리로 프로세서가 바로 사용 할 수 있는 데이터를 담는 영역)

 

Q) 콜스택은 어떻게 이루어져 가나요?

#include <iostream>
using namespace std;

void one(int c, int d) {
	two();
}

void two() {
	int e, f;
}


int main() 
{
	int a, int b;
	one(a, b);
}

 

이렇게 생긴 함수구조가 있다고 생각합시다.

 

차곡차곡 아래로 쌓이고 빠져나갈때는 위에서부터 빠져 나갑니다.

 

 

++ 추가적으로 당연하겠지만 스택의 메모리 공간은 한정되어있습니다.

 

이 스택의 크기를 넘겨버리면, Stack Overflow가 에러가 나버립니다.

 

Stack 크기

Visual Studio IDE에선 스택크기의 기본값은 1MB입니다.

 

linux에서는 8192 Killo Byte입니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.