메모리 구조: 두 판 사이의 차이
기술노트
(CS 용어 정리 - 메모리 구조 추가) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
== 메모리 구조 == | == 💻 프로그램 메모리 구조 == | ||
프로그램이 | 프로그램이 실행될 때, 운영체제(OS)가 할당해주는 '''메모리 공간의 사용 방식'''에 대한 약속입니다. | ||
https://user-images.githubusercontent.com/65716445/205929196-7e1f59c0-3b2b-4db7-8e0c-9f9235af7ccd.png | |||
---- | |||
=== 📂 4가지 메모리 영역 === | |||
* '''코드(Code) 영역''' | |||
** 실행할 코드가 기계어 형태로 저장되는 공간 (읽기 전용) | |||
* '''데이터(Data) 영역''' | |||
** 전역 변수, 정적(static) 변수가 저장되는 공간 | |||
** 프로그램 시작부터 종료까지 계속 유지됨 | |||
* '''힙(Heap) 영역''' | |||
** 개발자가 '''직접''' 할당/해제하는 메모리 공간 (예: `new` 키워드) | |||
** 런타임에 크기가 결정되며, 관리를 못하면 '메모리 누수' 발생 | |||
* '''스택(Stack) 영역''' | |||
** 함수 호출 시 지역 변수, 매개변수가 저장되는 공간 | |||
** 함수가 끝나면 '''자동으로''' 해제됨 (LIFO 구조) | |||
---- | |||
=== | === 🔥 스택 vs 힙 (Stack vs Heap) === | ||
--- | {| class="wikitable" | ||
! 구분 !! 스택 (Stack) !! 힙 (Heap) | |||
|- | |||
! 관리 주체 || OS (자동) || 개발자 (수동) | |||
|- | |||
! 속도 || 빠름 || 느림 | |||
|- | |||
! 생명 주기 || 함수와 동일 || 직접 해제 전까지 | |||
|- | |||
! 용도 || 지역 변수 || 객체, 인스턴스 | |||
|} | |||
---- | |||
=== | === ⚠️ 메모리 오버플로우 === | ||
할당된 메모리 공간을 넘어서는 경우 발생합니다. | |||
* | * '''스택 오버플로우''' : 스택 공간이 부족하여 힙을 침범 (주로 무한 재귀 시 발생) | ||
* | * '''힙 오버플로우''' : 힙 공간이 부족하여 스택을 침범 | ||
---- | |||
=== 💡 개발자 핵심 Point === | |||
* | * 메모리는 '''코드, 데이터, 힙, 스택''' 4가지로 나뉜다. | ||
* '''스택(Stack)'''은 빠르고 자동이지만 작다. (지역 변수) | |||
* 스택 | * '''힙(Heap)'''은 크고 유연하지만, 느리고 직접 관리해야 한다. (`new`로 생성된 객체) | ||
* 함수를 너무 깊게 호출하거나 큰 데이터를 잡으면 '''스택 오버플로우'''가 발생할 수 있다. | |||
=== | == 📚 참고 자료 == | ||
* [https://luv-n-interest.tistory.com/1046] | |||
* [https://lxxyeon.tistory.com/70] | |||
* [https://all-young.tistory.com/17] | |||
* | |||
2025년 9월 6일 (토) 01:32 판
💻 프로그램 메모리 구조
프로그램이 실행될 때, 운영체제(OS)가 할당해주는 메모리 공간의 사용 방식에 대한 약속입니다.
📂 4가지 메모리 영역
- 코드(Code) 영역
- 실행할 코드가 기계어 형태로 저장되는 공간 (읽기 전용)
- 데이터(Data) 영역
- 전역 변수, 정적(static) 변수가 저장되는 공간
- 프로그램 시작부터 종료까지 계속 유지됨
- 힙(Heap) 영역
- 개발자가 직접 할당/해제하는 메모리 공간 (예: `new` 키워드)
- 런타임에 크기가 결정되며, 관리를 못하면 '메모리 누수' 발생
- 스택(Stack) 영역
- 함수 호출 시 지역 변수, 매개변수가 저장되는 공간
- 함수가 끝나면 자동으로 해제됨 (LIFO 구조)
🔥 스택 vs 힙 (Stack vs Heap)
구분 | 스택 (Stack) | 힙 (Heap) |
---|---|---|
관리 주체 | OS (자동) | 개발자 (수동) |
속도 | 빠름 | 느림 |
생명 주기 | 함수와 동일 | 직접 해제 전까지 |
용도 | 지역 변수 | 객체, 인스턴스 |
⚠️ 메모리 오버플로우
할당된 메모리 공간을 넘어서는 경우 발생합니다.
- 스택 오버플로우 : 스택 공간이 부족하여 힙을 침범 (주로 무한 재귀 시 발생)
- 힙 오버플로우 : 힙 공간이 부족하여 스택을 침범
💡 개발자 핵심 Point
- 메모리는 코드, 데이터, 힙, 스택 4가지로 나뉜다.
- 스택(Stack)은 빠르고 자동이지만 작다. (지역 변수)
- 힙(Heap)은 크고 유연하지만, 느리고 직접 관리해야 한다. (`new`로 생성된 객체)
- 함수를 너무 깊게 호출하거나 큰 데이터를 잡으면 스택 오버플로우가 발생할 수 있다.