Stack vs Heap
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