메모리 힙이란 무엇입니까?


174

메모리 힙이란 무엇입니까?

답변:


234

아마도 데이터 구조 관점이 아닌 메모리 할당 관점에서 을 의미하는 입니다 (용어에는 여러 의미가 있음).

매우 간단한 설명은 동적으로 할당 된 메모리가 상주 하는 메모리의 일부라는 것입니다 (예 :를 통해 할당 된 메모리 malloc). 힙에서 할당 된 메모리는 다음 중 하나가 발생할 때까지 할당 된 상태로 유지됩니다.

  1. 메모리는 free'D
  2. 프로그램이 종료됩니다

할당 된 메모리에 대한 모든 참조가 손실 된 경우 (예 : 더 이상 포인터를 저장하지 않은 경우) 메모리 누수가 있습니다. 여기에는 메모리가 여전히 할당되어 있지만 더 이상 쉽게 액세스 할 수있는 방법이 없습니다. 누출 된 메모리는 향후 메모리 할당을 위해 회수 할 수 없지만 프로그램이 종료되면 운영 체제에서 메모리를 해제합니다.

이것을 로컬 메모리 (메소드 내에 정의 된)가 존재하는 스택 메모리 와 대조해보십시오 . 스택에 할당 된 메모리는 일반적으로 함수가 반환 될 때까지만 유지됩니다 (정적 로컬 변수와 같은 일부 예외가 있음).

이 기사 에서 힙에 대한 자세한 정보를 찾을 수 있습니다 .


3
지역 변수는 어떻게 스택에 존재할 수 있습니까? 스택은 매우 특정한 순서로 한 번에 하나의 변수 만 사용할 수 있습니다. 스택에서 더 낮은 곳에서 로컬 변수가 필요한 경우 어떻게합니까?
CodyBugstein

9
@Imray-정적으로 유형이 지정된 언어에서 로컬 매개 변수의 크기는 컴파일 타임에 알려져 있습니다. 따라서 로컬 변수는 주소 오프셋을 통해 스택에서 직접 액세스 할 수 있습니다. 이를 위해 스택을 팝할 필요는 없습니다. 자세한 내용은 이 답변 을 참조하십시오.
LeopardSkinPillBoxHat

17

메모리 은 메모리에서 임의 액세스로 메모리를 할당 할 수있는 위치입니다. 메모리가 매우 정의 된 순서로 할당 및 해제
되는 스택 과 달리 힙에 할당 된 개별 데이터 요소는 일반적으로 서로 비동기 방식으로 해제됩니다. 프로그램이 해당 포인터를 명시 적으로 해제하면 이러한 데이터 요소가 해제되어 힙 조각화가 발생할 수 있습니다. 반대로 스택의 작동 방식에 따라 맨 위 (또는 맨 아래)의 데이터 만 해제되어 데이터 요소가 할당 된 역순으로 해제 될 수 있습니다.


9

힙은 순서없이 메모리가 할당되거나 할당 해제되는 영역입니다. 이것은 new연산자 또는 이와 유사한 것을 사용하여 객체를 만들 때 발생합니다 . 이것은 메모리가 처음에 할당 해제되는 스택과는 반대입니다.


8

메모리 힙은 동적으로 할당 된 메모리를 유지하기위한 일반적인 구조입니다. Wikipedia의 Dynamic_memory_allocation 을 참조하십시오 .

수영장, 스택 및 말뚝과 같은 다른 구조가 있습니다.


7

프로세스에서 사용중인 메모리 관리자가 운영 체제에서 할당 한 메모리 청크입니다. malloc()특히 호출 은 운영 체제를 직접 처리하지 않고이 힙에서 메모리를 가져옵니다.


7

메모리 힙이 아닌 힙 메모리를 의미 할 수 있습니다.

힙 메모리는 기본적으로 실행중인 프로그램이 청크를 요청할 수있는 큰 메모리 풀 (일반적으로 프로세스 당)입니다. 이를 일반적으로 동적 할당 이라고 합니다.

"자동 변수"가 할당되는 스택과 다릅니다. 예를 들어, C 함수에서 포인터 변수를 정의하면 메모리 주소를 보유하기에 충분한 공간이 스택에 할당됩니다. 그러나 힙에 공간을 동적으로 할당 (malloc 포함) 한 다음이 메모리 청크가 시작되는 주소를 포인터로 제공해야하는 경우가 종종 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.