스택큐힙리스트

스택과 힙은 무엇이며 어디에 있나요? 본문

카테고리 없음

스택과 힙은 무엇이며 어디에 있나요?

스택큐힙리스트 2023. 3. 2. 23:59
반응형

스택과 힙은 무엇인가요?
컴퓨터 메모리 상에서 그들은 물리적으로 어디에 위치하고 있나요?
그들이 운영 체제나 언어 런타임에 의해 얼마나 제어되나요?
그들의 범위는 무엇인가요?
그들의 크기를 결정하는 것은 무엇인가요?
무엇이 빠르게 만들까요?


스택은 실행 스레드의 스크래치 공간으로 예약된 메모리입니다. 함수가 호출될 때, 지역 변수와 일부 북키킹 데이터를 위해 스택 상단에 블록이 예약됩니다. 그 함수가 반환될 때, 블록은 사용되지 않게되고 다음번 함수 호출때 사용할 수 있습니다. 스택은 항상 LIFO (Last In First Out) 순서로 예약됩니다. 최근에 예약된 블록은 항상 다음번으로 해제될 블록입니다. 이는 스택을 추적하는 것이 정말 간단하게 만듭니다. 스택에서 블록을 해제하는 것은 단순히 하나의 포인터를 조정하는 것입니다.
힙은 동적 할당을 위해 지정된 메모리입니다. 스택과 달리, 힙에서 블록 할당 및 해제에 강제적인 패턴이 없습니다. 언제든 블록 할당이 가능하며 언제든지 해제할 수 있습니다. 따라서 언제나 어떤 부분이 할당되어 있는지 또는 해제된 상태인지 추적하는 작업이 더 복잡해집니다. 다양한 사용 패턴에 대한 힙 성능을 조정하기 위해 맞춤형 힙 할당자가 많이 제공됩니다.
각 스레드는 스택을 가져오며, 일반적으로 응용 프로그램에는 하나의 힙만 있지만 (다른 종류의 할당을위한 여러 힙을 가지는 것은 드문 일이 아닙니다).
당신의 질문에 직접 답을 드리면:

그들은 운영체제나 언어 런타임에 얼마나 많이 제어됩니까?

시스템 레벨 스레드마다 OS가 스택을 할당합니다. 일반적으로 언어 런타임에서 어플리케이션을 위한 힙을 할당하기 위해 OS가 호출됩니다.

그들의 범위는 무엇입니까?

스택은 스레드에 연결되어 있으므로 스레드가 종료되면 스택은 회수됩니다. 힙은 일반적으로 런타임에 응용 프로그램이 시작될 때 할당되며, 응용 프로그램(기술적으로는 프로세스)이 종료될 때 회수됩니다.

그들 중 하나의 크기를 결정하는 것은 무엇인가요?

스택의 크기는 스레드가 생성될 때 설정됩니다. 힙의 크기는 애플리케이션 시작시 설정되지만 공간이 필요할 때마다(할당기가 운영 체제로부터 더 많은 메모리를 요청함) 늘어날 수 있습니다.

무엇이 더 빠르게 만드는가요?

스택은 접근 패턴으로 인해 메모리 할당 및 해제가 매우 쉽기 때문에 더 빠릅니다(포인터/정수는 쉽게 증가 또는 감소됨). 반면 힙은 할당 또는 해제에 복잡한 분석이 필요합니다. 또한 스택의 각 바이트는 자주 재사용되므로 프로세서 캐시에 매핑되어 매우 빠릅니다. 또한 힙은 주로 전역 자원이므로 멀티 스레드 안전해야 하며, 프로그램에서 "모든" 힙 액세스와 동기화되어야 합니다.

"스택(Stack)과 힙(Heap)이란?" 프로그래밍을 하다보면 "스택"과 "힙"이란 용어를 자주 들어보게 됩니다. 이 둘은 메모리 관리와 관련된 중요한 개념입니다. 스택(Stack)은 함수 호출과 관련된 공간으로, 함수가 호출되면 지역 변수와 매개 변수들이 스택에 순서대로 쌓이게 됩니다. 이때 마지막에 들어온 데이터는 가장 먼저 나가게 되므로 후입선출(LIFO) 구조라고도 합니다. 스택은 메모리의 상단에서 시작하여 아래로 쌓이게 되며, 스택에서 사용된 공간은 자동으로 해제됩니다. 반면에 힙(Heap)은 실행 중에 동적으로 할당되는 메모리 공간입니다. 힙은 사용자가 할당하는 메모리 공간이기 때문에, 메모리를 해제시키는 책임도 사용자에게 있습니다. 힙은 메모리의 하단에서 시작하여 위로 쌓이는 구조로, 이때 메모리 주소값이 낮은 쪽에서 높은 쪽으로 증가합니다. 스택과 힙은 각각의 특징을 가지고 있으며, 프로그래밍에서 필수적으로 사용되는 개념입니다. 앞으로도 스택과 힙을 올바르게 이해하여 프로그래밍에 활용해보세요!

반응형
Comments