본문 바로가기
개발자 공부

메모리 구조

by Dev_Hugh 2023. 11. 9.
728x90
반응형

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

프로그램이 실행되기 위해선 먼저 프로그램이 메모리에 Load 되어야 한다. 메모리가 올라가는걸 의미하는데 이는 코드의 부분들이 적당한 메모리에 할당됨을 의미한다.

코드의 적당한 부분이 어떤 메모리에 할당되는지 알아보는게 중요하다!

 

프로그램이 OS로부터 할당받는 대표적인 메모리 공간은 [코드 영역] [데이터 영역] [스택 영역] [힙 영역]이 있다.

메모리 영역

[코드 영역]

- 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고 불린다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.

 

[데이터 영역]

- 전역(Global) 변수, 정적(Static) 변수가 저장되는 영역으로 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸된다.

 

[스택 영역]

- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸된다.

- 스택은 LIFO 방식에 따라 동작하므로 늦게 저장된 데이터가 가장 먼저 인출된다. 데이터 삽입은 Push로 데이터 인출은 Pop으로 한다.

- 컴파일 타임에 크기가 결정되므로 무한히 할당할 수 없다. 재귀 함수가 너무 깊게 호출되거나 함수가 지역변수를 너무 많이 가지고 있어 Stack 영역을 초과하는 경우가 생기는데 이 상황이 바로 stack overflow 에러다.

- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

 

[힙 영역]

- 사용자가 직접 관리할 수 있는 그리고 반드시 관리 해야만 하는 영역이다. 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다. 만약 사용자가 메모리를 동적으로 할당했는데 해제하지 않았다면 이는 memory leak이 발생하여 치명적이다.

- 객체의 참조값 (Object Reference)이 이 영역에 저장된다. 즉 동적 메모리로 생성한 모든건 이 공간에 저장 (흔히 Class와 Class 객체들은 이곳에 저장된다)

- 스택보다 할당할 수 있는 메모리 공간이 많다는게 장점이나 포인터로 메모리 영역을 접근해야 하기에 다른 자료구조에 비해 데이터를 R/W(읽고 쓰기)하는데 느리다.

- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

 

Stack VS Heap 영역

- 사실상 두 영역은 같은 공간을 사용한다. 즉 Stack 영역이 넓어지면 Heap 영역은 좁아지고 반대로 Heap이 넓어지면 Stack은 좁아진다.

- 그러다보니 각 영역이 서로의 영역을 침범하는 경우가 생기는데 Stack이 Heap에 침범하면 Stack Overflow, Heap이 Stack에 침범하면 Heap Overflow다. 왜냐면 본인이 넘쳐서 침범했으니 ㅎ

- Stack에는 Heap 영역에 생성된 Object 타입의 데이터 참조값이 할당된다. 또한 원시타입 (byte, short, int, long, double, float, boolean, char)이 이곳에 할당되며 그 외는 다 Heap에 할당된다.  

728x90
반응형

'개발자 공부' 카테고리의 다른 글

컴퓨터 메모리 저장 방식과 2차원 for문 관계  (0) 2023.12.14
[운영 체제] 신입 필수 기본기 1  (0) 2023.11.10
프레임워크? 라이브러리?  (0) 2023.11.09
SOLID 원칙  (0) 2023.06.20