일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 투자
- Java
- algorithmTest
- 프로그래머스 알고리즘 공부
- JavaScript
- 지혜를가진흑곰
- 채권
- 백준알고리즘
- 돈
- 프로그래밍언어
- 자바스크립트
- 자바
- 다독
- 경제
- 재테크
- 서평
- 책을알려주는남자
- 알고리즘트레이닝
- algorithmtraining
- 책알남
- 독후감
- algorithmStudy
- 알고리즘공부
- C
- 성분
- 주식
- 화장품
- 독서
- C++
- 알고리즘 공부
- Today
- Total
탁월함은 어떻게 나오는가?
메모리구조 스택(Stack)과 (Heap)의 차이점 본문
메모리에 대한 이야기를 하다가 흔히들 이야기를 하는 힙(Heap)과 스택(Stack)에 대한 정확한 정의를 하기 어려워서 찾아보게 되었다. 힙과 스택에 대한 이야기를 하기 전에, 힙과 스택을 사용하려면 메모리 구조에 대해서 먼저 알아보자.
메모리 구조
프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 한다.
또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다.
프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지가 있다.
위의 사진은 C++ 동적 메모리에 대한 사진이지만, 메모리구조는 컴퓨터 공학에서 가져오는 이론이기에 C, C++, Java 상관이 없다.
4 major memory segments를 보면 4가지분야로 나뉘어 있다.
1) 글로벌 or 데이터(data) 영역
- 본문: variables outside stack, heap
- 직역: 스택 외부의 변수, 프로세스
- 설명: 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다.
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.
2) 코드(code)영역
- 본문: the compiled program
- 직역: 컴파일된 프로그램
- 설명: 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고 불린다.
cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.
3) 힙(heap) 영역
- 본문: dynamically allocated variables
- 직역: 동적으로 할당된 변수
- 설명: 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있고, '그리고 관리를 해야만 하는' 메모리 영역이다.
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
4) 스택(stack) 영역
- 본문: parameters, automatic and temporary variables
- 직역: 파라미터, 자동 및 임시 변수
- 설명: 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역이다.
스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.
스택 영역은 푸시(push) 동작으로 데이터에 저장하고, 팝(pop) 동작으로 데이터를 인출한다.
이러한 스택은 후입 선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다. 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
스택과 힙의 장단점 작성
스택
- 매우 빠른 액세스
- 변수를 명시적으로 할당 해제할 필요가 없다
- 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않는다.
- 지역 변수만 해당된다
- 스택 크기 제한(OS에 따라 다르다)
- 변수의 크기를 조정할 수 없다
힙
- 변수는 전역적으로 액세스 할 수 있다.
- 메모리 크기 제한이 없다
- (상대적으로) 느린 액세스
- 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가 조각화 되어 해제될 수 있다.
- 메모리를 관리해야 한다 (변수를 할당하고 해제하는 책임이 있다)
- 변수는 C언어 realloc() 또는 자바 new를 사용
'[Snow-ball]프로그래밍(컴퓨터) > 프로그래밍 및 컴퓨터 개론 이론' 카테고리의 다른 글
라이브러리(Library)와 프레임워크(Framework)의 차이에 대해서 (0) | 2022.01.08 |
---|---|
자료구조 시각화 사이트 (0) | 2021.10.16 |
기본개념3 [JavaScrpit, react, redux] (0) | 2021.07.13 |
블록체인 기본 개념 (0) | 2021.07.12 |
기본개념 간단하게 정리[JavaScript] (0) | 2021.07.09 |