Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- tree
- 배열
- Lock
- linkedmap
- 자바
- Java
- 하드웨어 쓰레드
- 커널모드
- 프로그래머스
- 쓰레드 덤프
- MAP
- avl
- 쓰레드
- list
- 컨디션 변수
- black-red
- set
- os 쓰레드
- Red-Black
- OS
- non-blocking
- 코딩테스트
- synchronizeation
- 코테
- 트리
- 유저모드
- HashMap
- 유저 쓰레드
- 스케줄링
- cpu
Archives
변수의 기록
메모리 구조 정리 (스택(Stack) 집중) 본문
2024년 4월 3일
메모리 공부 (스택 집중)
전체 메모리 구조 개요 (낮은 주소 → 높은 주소)
📘 스택(Stack) 구조 정리 - 시스템 관점 요약
1️⃣ 스택의 기본 개념
항목내용
구조 | LIFO (Last In, First Out) |
위치 | 프로세스 메모리의 Stack 영역 |
방향 | 높은 주소 → 낮은 주소 방향으로 성장 |
사용 목적 | 함수 호출 시 지역 변수, 매개변수, 반환 주소, 이전 상태 저장 등 |
2️⃣ 주요 레지스터: ESP vs EBP
레지스터역할설명
ESP (Stack Pointer) | 스택의 현재 꼭대기 위치 | 지역 변수 할당, push/pop 시 변동 |
EBP (Base Pointer) | 함수의 스택 프레임 기준점 | 지역 변수/매개변수 접근 시 기준점, 함수 내 고정 |
✅ ESP는 변동, EBP는 고정된 기준
3️⃣ 함수 호출 시 스택 프레임 생성 흐름
예: a() → b() → c() 호출
🔄 함수 진입 시
push ebp ; 이전 함수의 EBP 저장
mov ebp, esp ; 현재 프레임 기준점 설정
sub esp, N ; 지역 변수 공간 확보
🧷 메모리 스택 상태 (위가 높은 주소)
EX)
| arg1, arg2... |
| return address to caller | ← call 시 자동 저장됨
| previous EBP | ← push ebp
| local variable n |
| ... |
↑ ESP: 변동함
EBP: 고정 기준
4️⃣ 함수 리턴 시 스택 복구 흐름
mov esp, ebp ; 스택 포인터를 프레임 기준으로 복구
pop ebp ; 이전 프레임의 기준점 복원
ret ; return address pop 후 점프
❗ ESP는 따로 저장하지 않아도, EBP와 return address만으로 복구됨
5️⃣ 콜 스택(Call Stack)이란?
- 현재까지 호출된 함수들의 스택 프레임이 쌓인 구조
- 리턴되면 하나씩 pop되어 이전 상태로 복귀
- 디버깅 시 backtrace 추적이 가능한 이유
6️⃣ ESP는 왜 따로 저장하지 않나?
- call 명령어가 return address를 스택에 자동 저장
- mov esp, ebp + ret 만으로 자연스럽게 복귀 가능
- ESP는 현재 상태를 가리키는 임시 포인터일 뿐, 복귀 흐름에 직접 쓰이지 않음
7️⃣ 요약 흐름도
함수 호출: call → return addr 저장 → 새 프레임 생성 (push ebp → mov ebp, esp)
실행 중: ESP는 계속 변동 (지역 변수, push 등)
함수 종료: mov esp, ebp → pop ebp → ret → return address jump
4️⃣ 힙 vs 스택 요약 비교
힙 | 스택 | |
생성 방법 | new로 생성 | 메서드 호출 시 자동 생성 |
할당 위치 | 런타임 중 동적으로 | 컴파일 시 위치 고정 |
메모리 크기 | 비교적 큼 | 작음 (제한 있음) |
수명 | GC가 제거 | 메서드 종료 시 자동 pop |
예시 | new Dog() | int a = 10; (지역 변수) |
📌 최종 요약
포인트설명
스택은 함수 호출/복귀의 핵심 구조 | |
EBP는 고정 기준점, ESP는 현재 위치 포인터 | |
각 함수는 스택 프레임 하나를 구성 | |
콜 스택은 스택 영역에서 자연스럽게 구성됨 | |
ESP는 복구 대상이 아님 (EBP와 ret로 충분) |
'CS지식 > 자료구조 (Data Structure)' 카테고리의 다른 글
(자료구조) 레드-블랙 트리(Red-Black Tree) 개념과 속성 정리 part1 (예제 포함!!!!!) (1) | 2025.05.01 |
---|---|
(자료구조) AVL 트리 개념과 특징 (0) | 2025.04.30 |
(cs)이진 탐색 트리 (Binary Search Tree, BST) (1) | 2025.04.27 |
트리(Tree) 기본 구조와 핵심 개념 정리 (0) | 2025.04.27 |
자료구조 기초 정리 (배열, 리스트 , Set , Map 예시 - java ) (0) | 2025.04.03 |