1 minute read

Stack은 메소드가 실행될 때 변수가 push(입력)되며 실행이 종료될 때 pop(해제)된다.

heap은 new혹은 c에서는 malloc 될 때 만들어지며 자바는 가비지 컬렉션에 의해 사용되지 않을 때

자동으로 해제되고, c에서는 직접 관리해서 해제 해줘야 한다.

스택

LIFO(last in, first out) 데이터 구조로 CPU에 의해 관리되고 최적화된다.

새 변수를 선언 할 때마다 스택에 푸시 (push)된다. 그런 다음 함수가 종료 될 때마다 해당 함수에 의해 스택에 푸시 된 모든 변수가 해제된다.

메모리를 손으로 할당 할 필요가 없으며 더 이상 필요하지 않으면 메모리를 확보 할 필요가 없다.

게다가 CPU가 스택 메모리를 효율적으로 구성하기 때문에 스택 변수를 읽고 쓰는 속도가 매우 빠르다.

메모리를 직접 관리 할 필요가 없다. 변수는 자동으로 할당되고 해제된다.

스택에 크기 제한이있다.

힙은 자동으로 관리되지 않고 CPU가 엄격하게 관리하지 않는 컴퓨터 메모리 영역

힙에 free()메모리 혹은 자바에서는 new를 하면 더 이상 필요하지 않은 메모리를 할당 해제해야한다. 이렇게하지 않으면 프로그램에 메모리 누수가 발생

하지만 자바는 가비지 컬렉션을 이용

힙 메모리는 포인터 를 사용 하여 힙의 메모리에 액세스 해야하기 때문에 읽기와 쓰기가 약간 느리다.

스택과 달리 힙에 작성된 변수는 프로그램의 모든 함수에서 액세스 할 수 있습니다. 힙 변수는 본질적으로 범위가 전역

힙 vs 스택

스택

  • 매우 빠른 액세스

  • 변수를 명시 적으로 할당 해제 할 필요가 없다

  • 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않는다.

  • 지역 변수 만

  • 스택 크기 제한

  • 변수의 크기를 조정 X

  • 변수는 전역 적으로 액세스 할 수 있다.

  • 메모리 크기 제한 없음

  • (상대적으로) 느린 액세스

  • 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당 된 후 시간이 지남에 따라 메모리가 조각화되어 해제 될 수 있다.

  • 메모리를 관리해야함.

출처 : https://m.blog.naver.com/PostView.nhn?blogId=codingspecialist&logNo=221195242403&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

Categories:

Updated: