본문 바로가기
카테고리 없음

메모리 구조(코드, 데이터, 스택, 힙), 동적/정적 할당

by minism 2023. 1. 9.

 

 

 

 

 

메모리 구조 Memory Structure

 

 

컴퓨터의 운영체제(OS)는 프로그램 실행을 위해 해당 프로그램을 메모리(RAM)에 로드한다. 메모리는 낮은 주소(Low address)에서 높은 주소(High address) 순으로 코드, 데이터, 스택, 힙 영역으로 나뉜다.

 

 

 

 코드 영역 Code

실행할 프로그램 코드가 저장되는 영역. 텍스트 영역이라고도 부른다. 함수, 제어문, 상수 등이 코드 영역에 저장되고 CPU는 코드 영역의 명령어를 처리한다.

 

 데이터 영역 Data

 

프로그램의 전역 변수와 정적 변수가 저장되는 영역. 컴파일 시점에 크기가 결정된다. 프로그램 시작 시 할당되었다가 프로그램이 종료되면 소멸한다.

 

 스택 영역 Stack

 

함수 호출과 관련된 지역 변수와 매개 변수가 저장되는 영역. 함수 호출 시 할당되며 함수의 호출이 종료되면 소멸한다. 컴파일 시점에 크기가 결정된다. 스택 영역에 저장되는 함수 호출 정보를 스택 프레임(Stack frame)이라고 한다.

프로그램은 오작동 방지와 보안상의 문제 예방을 위해 스택 프레임이 스택의 공간을 다 차지한 이후에 또 다른 스택 프레임이 저장되려고 하면 스택 오버 플로 에러를 발생시키고 프로그램을 강제 종료시킨다.

데이터 입출은 푸시(Push), 팝(Pop)으로 이뤄지며 후입선출법(LIFO, Last-In First-Out)을 따른다. 메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.

 

 힙 영역 Heap

 

사용자에 의해 동적으로 할당되는 공간(Java에서는 가비지 컬렉터가 자동으로 해제한다)으로 런타임 시점에 크기가 결정된다. new 연산자로 생성된 객체나 클래스, 참조 변수 등이 힙 영역에 저장된다. 메모리의 낮은 주소에서 높은 주소 방향으로 할당된다.

 

사실상 스택과 힙은 같은 공간을 공유한다. 스택이 높은 주소부터 할당되고, 힙이 낮은 주소부터 할당되다가 각 영역이 서로의 영역을 침범하게 되면 발생하는 게 힙/스택 오버 플로 에러(Heap/Stack Overflow Error)다.

 

 

 

 

 

정적/동적 할당

 

정적(Static) 할당과 동적(Dynamic) 할당을 구분하는 가장 큰 기준은 메모리 할당이 프로그램 실행 전에 이뤄지느냐, 후에 이뤄지느냐이다.

 

 정적 할당

컴파일 단계에서 필요한 메모리 공간 할당이 이뤄지는 것.

 

메모리

코드와 데이터 영역은 정적 메모리 영역에 속한다.

 

객체

  • 장점: 메모리 누수 걱정 없음.
  • 단점: 메모리 크기가 정해져 있어 수정 불가(이로 인한 메모리 낭비 발생 가능성).

 

 동적 할당

런타임 단계에서 필요한 메모리 공간 할당이 이뤄지는 것.

 

메모리

스택과 힙 영역은 동적 메모리 영역에 속한다.

 

객체

포인터를 사용해 Heap 영역을 가리켜 해당 공간 사용.

 

장점: 원하는 만큼의 메모리 할당 가능.

단점: 메모리 직접 해제, 메모리 누수 발생 가능성.

 

 

 

주의할 점은 메모리의 정적/동적 할당과 객체들의 정적/동적 할당을 구분해서 생각해야 한다는 점이다. 예를 들어 지역 변수나 매개변수의 경우 컴파일 단계에서 메모리 공간 할당을 받기 때문에 정적 할당 변수에 해당하지만 실제 할당받는 메모리 공간은 동적 메모리 영역인 Stack 영역이다.

 

 

 

컴파일이 뭐지? 런타임이 뭐지?

 

 

컴파일 타임 Compile time과 런 타임 Run time의 개념

컴파일 타임 Compile time 개발자가 Java나 C 같은 개발 언어로 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하여 실행 가능한 프로그램으로 만드는 과정을 의미한다. 컴파일 과정에서

min-ism.tistory.com

 

 

 

 

 

 

 

- References

 

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

[컴퓨터 기초] 메모리구조(Memory Structure) - jinShine

프로그램 실행 순서 메모리 영역에 관해 이야기하기 전에 어떤식으로 프러그램이 실행되는지 과정을 살펴 보겠습니다. 프로그램의 정보를 읽어 메모리에 로드되는 과정을 보실 수 있으실텐데,

jinshine.github.io

 

 

메모리 구조 [Memory Structure]

안녕하세요. 오늘은 제목에서 밝혔듯 메모리 구조에 대해 알아보려 합니다. 흔히 메모리라고 하면 RAM을 지칭하는데요, 보통 컴퓨터 구조에 대해 학습하시거나 배우셨던 분들은 알겠지만 메모리

st-lab.tistory.com

 

 

12. 메모리 영역, 동적 할당, 정적 할당 / Code, Data, Heap, Stack / malloc, free, new, delete

바로 앞의 '주소 반환' 포스팅에서 우린 동적 할당된 메모리의 주소 반환에 대해 공부했다. 하지...

blog.naver.com