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 |