학교에서 컴공 기초를 다시 다지기 위해 c 수업 들어가기전 이론 수업을 진행했다.
내용은 바로 컴퓨터 구조에 관한 이야기 였는데 오늘은 그중에서 메모리의 구조를 알아보았다.
일단 어떤 프로그램이 실행되기 위해서는 프로그램이 메모리에 로드 돼야한다 그리고 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리공간을 제공하고
이 메모리는 크게 아래 4개의 영역으로 나뉜다

- 코드(code)의 영역: 실행항 프로그램의 코드
- 데이터(data)의 영역: 전역 변수, 정적 변수
- 스택(stack)의 영역: 컴파일 타임에 크기가 결정된다
- 힙(heap)의 영영: 런타임 시 크기가 결정된다
코드 영역
- 작성한 소스코드가 저장되는 영역으로 텍스트 영역 으로도 불림
- 2진수로 저장한다
- 실행 파일을 구성하는 명령어들이 올라가는 메모리로 함수, 제어문, 상수 등이 저장된다.
- CPU는 코드 영역에 저장된 명령어들을 하나씩 가져가서 실행한다.
데이터 영역
- 전역 변수와 정적 변수가 저장되는곳
- 메인함수 전에 선언돼 프로그램의 시작과 동시에 할당되고 프로그램이 종료돼야 메모리가 소멸( 웹의 session과 유사한 것 같음)
힙 영역 ( 엉덩이 hip 이 아님)
- 이 공간에 메모리 할당하는것을 동적할당 이라고 불린다
- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
- 응용 프로그램이 종료될 떄까지 메모리가 유지되기 때문에 사용하고 난 후 반드시 메모리 해제를 해줘야 한다. (메모리 누수가 발생 여기는 좀 localStorage와 유사한 것 같음)
- 영역 중 유일하게 런타임시 크기가 결졍
- 참조형 데이터 타입을 갖는 객체, 배열 등이 저장되는 공간
- 메모리의 낮은 주소부터 할당되는 선입선출 구조
스택 영역
- 프로그램이 자동으로 사용하는 임시 메모리 영역
- 함수 호출시 생성되는 지역변수와 매개변수가 저장되는 영역
- 함수 호출이 안료되면 저장된 메모리도 해제된다.
- 힙 영역과 달리 메모리의 높은 주소부터 할당되는 후입선출 구조
+ 더 찾아봤는데 Heap 영역과 Stack 영역은 같은 공간을 공유한다는 내용과 Heap이 메모리 위쪽 주소부터 할당되면 Stack은 아래에서부터 할당된다 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데, 이명칭이 모든 개발자들이 한번쯤 들어봤을 단어인 Heap Overflow 와 Stack Overflow 라고 부른다.
따라서 Stack 영역이 클수록 Heap 영역이 작아지고, Heap 영역이 크면 Stack 영역이 작아진다(상관 관계)는 특징이 있다.
참고: https://velog.io/@shindoyeon/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0 및 그 외 기술 블로그
'개발' 카테고리의 다른 글
| [코테] 프로그래머스 뒤에서 5등 위로 (0) | 2025.04.10 |
|---|---|
| [타입스크립트] any와 제네릭: 타입 안정성의 차이점과 올바른 사용법 (0) | 2025.04.07 |
| [알고리즘] 프로그래머스 직사각형 별찍기 (0) | 2025.03.12 |
| 브라우저의 sessionStorage와 localStorage (0) | 2025.03.09 |
| React Hook 규칙이 그래서 뭔데?? (0) | 2025.03.09 |