heap & stack

2021. 6. 15. 01:47프로그래밍/개인프로젝트

개인적으로 공부하고 생각을 정리하기위해 작성하는 글입니다

오류를 지적해주시면 저의 공부에 많은 도움이 될 것입니다 


heap&stack

  스택
데이터 구조 유형 스택은 선형 데이터구조 힙은 계층형 데이터 구조
접근속도 빠르다 '스택에 비해' 느리다
공간관리 OS에 의해 능률적인 공간관리, 그래서 조각화 되지 않는다. 힙의 공간은 효율적으로 사용되지 않음
메모리블록이 먼저 할당되고 해제되면서 조각화된다.
접근 지역변수만 전역변수
공간크기제한 OS에 따른 제한이 있다 특정한이 없음
크기조정 조정안됨 조정이 가능
메모리할당 메모리는 인접한 블록에 할당된다 임의의 순서대로 할당된다
할당과 해제 컴파일러 지침에 의해 자동수행된다 프로그래머가 직접 처리해야한다
할당해제 할당해제 할 필요 없다 할당해제가 필요하다
비용 저렴 비쌈
실행 스택은 3가지 방법으로 실행된다
1. 간단한 배열기반
2. 동적메모리사용
3. 링크된 목록 기반
배열과 트리를 사용해서 실행
주요쟁점 메모리부족 메모리 조각화
참조지역 자동 컴파일 시간 지침 정당한
적응성 고정크기 크기 조정 가능
액세스 시간 더 빠르게 느리게

위 자료는 메모리의 스택영역과 힙영역을 비교한 자료이다

 

스택

    스택은 지역변수를 할당하는 선형데이터구조며
    OS에서 효율적으로 공간관리를 하고 참조값 반환시 자동으로 삭제처리되며 메모리가 조각화되지않는다

    메모리크기에 제한이 있고 LIFO(Last In First Out)구조를 가지고 있다
    속도가 빠르고  비용이 저렴하다는 장점이 있지만

    스택메모리 크기가 제한적이라는점, 공간에 비해 적은 메모리가 할당되면 낭비될 수 있다는점,
    스택이 너무 많이쌓이면 스택오버플로우의 위험이 있다는 단점이 있다

 

 

힙은 객체나 배열을 할당하는 계층형 데이터구조이다

메모리 크기에 제한이 없다는 장점이 있다

힙메모리는 프로그래머가 할당/할당해제를 관리해야한다

(가비지컬렉터가 힙메모리에서 실행되어 개체가 사용하는 메모리를 해제함)

매번 할당할 블록의 사이즈를 정해서 블록을 할당하고 프로그래머가 관리해야하기에

스택에 비해비싸고 느리며 메모리조각화가 될 수 있다

힙은 스택에 비해  복잡한 구조이다

 

메모리 조각화 : '사용하기에 충분한 메모리가 존재하지만 사용할 수 없는 현상' 발생한다

 

 

큰 메모리 블록을 할당해야 하거나 변수를 오랫동안 유지해야하는 경우 하는 경우 힙을 사용해야하고

비교적 작은 변수는 기계적으로 빨리 처리할 수 있는 스택을 사용해야한다

 

 

출처