본문 바로가기
Old/복습

운영체제 - Call Stack

by onenewkong 2023. 12. 27.

Stack과 Heap

프로그램이 실행 중일 때, 변수는 일반적으로 call stack 혹은 process heap에 저장됨

process heap은 stack과 마찬가지로 실행 중인 프로그램에 변수를 저장하는 메모리 영역

Stack Allocation

  • 할당은 function calll stack에서 발생 (stack memory allocation)
  • 할당된 메모리의 크기 정보는 컴파일러가 갖고 있으며, 함수가 호출될 때마다 해당 변수는 stack에서 메모리를 가져오고 함수 호출이 끝날 때마다 변수에 대한 메모리 할당이 해제됨
  • 메서드가 실행 중일 때만 데이터에 접근할 수 있는 임시 메모리 할당 체계
  • 저장된 데이터의 소유자 쓰레드만 접근할 수 있어 상대적으로 안전함
  • 메모리 할당과 해제가 힙 메모리 할당보다 빠르지만, 저장 공간은 보다 작음

Heap Allocation

  • 객체를 만들 때마다 항상 힙 공간을 생성하고 이러한 객체에 대한 참조 정보는 항상 스택 메모리에 저장됨
  • 메모리 누수 발생 위험
  • 힙 메모리 공간에 대한 접근 및 처리 시간은 스택보다 느림
  • 모든 쓰레드에서 접근이 가능하므로 힙 메모리에 저장된 데이터는 안전하지 않음
  • 전체 어플리케이션 혹은 프로그램이 실행되는 한 접근 가능하거나 존재

Call Stack

: 함수 호출과 관련된 실행 컨텍스트를 관리하는 데이터 구조

함수 호출과 반환, 변수 저장을 추적하는 데 사용되며 프로그램 실행 중에 발생하는 함수 호출에 대한 정보를 저장

동작 방식

  • 함수 호출 시 호출한 함수에 대한 정보 (반환 주소, 함수 인수, 지역 변수 등)를 스택 프레임 단위로 call stack에 저장
  • 함수가 실행을 완료하고 반환할 때 해당 함수의 스택 프레임을 call stack에서 제거하고 반환 주소를 사용하여 호출자 함수로 돌아감

스택 오버플로우 발생 시 문제의 원인을 파악하고 해결하는 데 사용될 수 있음

'Old > 복습' 카테고리의 다른 글

C++ - 범위 기반 for문  (1) 2024.01.03
C++ - 생성자와 소멸자  (0) 2023.12.27
운영체제 - Thread  (0) 2023.12.27
게임 서버 - 관계형 데이터베이스와 NoSQL  (1) 2023.08.16
게임 서버 - 데이터베이스 기초  (2) 2023.08.01