Search

스택, 힙 (메모리 구조)

대분류
CS
소분류
컴퓨터 해부 노트
유형
메모리 구조
부유형
운영체제
메모리 관리
스택
최종 편집 일시
2024/11/09 13:33
생성 일시
2024/07/16 02:46
14 more properties

메모리 구조

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간
1.
코드(code) 영역
2.
데이터(data) 영역
3.
스택(stack) 영역
4.
힙(heap) 영역

코드 영역

실행할 프로그램의 코드가 저장되는 영역
=== 텍스트 영역
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리

데이터 영역

프로그램의 전역 변수와 정적 변수가 저장되는 영역
프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸

스택 영역

메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
스택 프라임 : 스택 영역에 저장되는 함수의 호출 정보
후입선출, 선입후출 동작 방식 - 가장 늦게 저장된 데이터가 가장 먼저 인출
메모리의 높은 주소에서 낮은 주소의 방향으로 할당
데이터 처리 방식
푸시(push) : 데이터 저장
팝(pop) : 데이터 인출

스택과 힙 비교

변수 엑세스 크기 비교
스택
매우 빠른 액세스
(상대적으로) 느린 액세스
변수를 명시적으로 할당 해제할 필요가 있음
메모리 크기 제한 없음
공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않는다
효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당 된 후 시간이 지남에 따라 메모리가 조각화되어 해제 될 수 있다.
지역 변수
전역 변수
스택 크기 제한 (OS에 따라 상이)
메모리 관리 필요 (변수를 할당하고 해제하는 것)
변수 크기 조정 불가능
변수는 C언어 realloc() or 자바 new
특성 비교
특성
스택 메모리 (Stack Memory)
힙 메모리 (Heap Memory)
수명 주기
메소드 호출과 함께 사용되며, 메소드 종료 시 메모리에서 제거
애플리케이션의 생명 주기 동안 사용되며, 가비지 컬렉터에 의해 관리
용도
메소드의 실행 상태, 지역 변수, 매개변수 저장
모든 자바 객체와 JRE 클래스들 저장
접근 속도
빠름
스택에 비해 상대적으로 느림
메모리 관리
자동 (LIFO 구조)
가비지 컬렉션에 의해 자동 관리
스레드 공유
각 스레드는 자신만의 스택을 가짐
모든 스레드에 의해 공유됨
메모리 할당
컴파일 시간에 결정
런타임에 결정