Metaverse/복습

운영체제 - Call Stack

onenewkong 2023. 12. 27. 23:15

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에서 제거하고 반환 주소를 사용하여 호출자 함수로 돌아감

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

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

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