본문 바로가기

프로그래밍/기본기ㆍ자료구조

Heap (힙 메모리)

728x90
반응형

 

개념

- 사전적 의미로 '아무렇게나 쌓은 더미'

- 프로그래밍 환경에서 원시 자료형이 아닌 보다 큰 크기의 데이터를 담기 위한 동적 할당 메모리 공간

- 객체와 배열이 생성되는 영역

- C나 C++ 등에서는 힙 메모리 할당 후 명시적으로 해제해 주어야 메모리 누수가 발생하지 않음

- C#의 경우 GC ( Garbage Collection )가 메모리 해제를 해주지만 GC 호출 시점에 따라 성능 저하가 발생할 수 있음

(new 연산자를 통해 동적 할당. C#의 경우 기본적으로 클래스, 인터페이스 형식의 인스턴스는 모두 동적 할당)

- 보통 전역변수나 레퍼런스 타입이 힙 영역에 할당

(class,interface, delegate, object, string)

- 프로그램이 실행될 때까지 알 수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램의 프로세스가 사용할 수 있도록 미리 예약되어 있는 메인 메모리의 영역으로 프로그램들에 의해 할당되었다가 회수되는 작용이 되풀이함

*원시 자료형

- 프로그래밍 언어가 제공하는 자료형 중 하나. 내장형 또는 기본형으로도 불림

- 정수, 실수, 문자 같이 간단한 형태로 구성되는 정보를 정의하는 자료 유형

- 자료형 중에서 가장 기본이 되는 자료형들

- 언어에 따라서 원시형의 범위가 다를 수 있다.

(C에서 문자열은 조합형, 자바스크립트에서는 기본형으로 취급)

*string에 대한 이야기

- string은 new를 사용하지도 않는데 왜 레퍼런스 타입인가 싶겠지만 string의 정의를 따라가보면

문자열을 저장할 수 있는 class 타입으로 즉, 레퍼런스 타입이 맞다.

- int나 float의 정의를 따라가보면 struct로 되어 있다.

string str = "abc";를 선언해보고 사용해보자

str[0] : 'a'

str[1] : 'b'

str[2] : 'c'

로 구성된다.

"abc"는 문자열 상수이기 때문에 str가 abc의 첫주소를 가리킨다.

문자열 상수 "abc"가 이미 객체이기 때문에 new가 필요 없다.

그러나, 다른 클래스나 인터페이스 등은 새로 객체를 만들어줘야 하기 때문에 new로 객체 생성을 해서 힙 메모리에 할당한다.

*class에서 스택 메모리와 힙 메모리

class TestClass tc;가 있다고 가정하자

tc : 스택 메모리에 할당 (이 때 참조값은 null)

tc = new TestClass; : 힙 메모리에 할당

(이 때 객체가 생성. 스택 메모리에 참조값(해시코드)이 할당된다)

(이 부분에 대해서는 참조타입 공부 정리 시 자세히..)

참고자료

https://ko.wikipedia.org/wiki/%EC%9B%90%EC%8B%9C_%EC%9E%90%EB%A3%8C%ED%98%95

 

원시 자료형 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 원시 자료형은 컴퓨터 과학에서 프로그래밍 언어가 제공하는 자료형 중 하나다. 원시형은 또한 내장형이나 기본형으로도 불린다. 언어와 그 구현에 따라서, 원시형은 메모리 상에 일대일로 대응되는 개체(Object)를 가질 수도 있다. 일반적으로 원시형은 언어 구조체 중 가장 빨리 연산처리 된다. 예를 들어, 정수형의 덧셈은 단 하나의 기계식 연산(machine instruction)으로 처리 될

ko.wikipedia.org

 

 

동적 메모리 할당 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 동적 메모리 할당 또는 메모리 동적 할당은 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 사용이 끝나면 운영체제가 쓸 수 있도록 반납하고 다음에 요구가 오면 재 할당을 받을 수 있다. 이것은 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리 할당과 대조적이다. 동적으로 할당된 메모리 공간은 프로그래머가 명시적으로 해제하거나 쓰레기

ko.wikipedia.org

 

 

스택(Stack)메모리 와 힙(Heap)메모리

프로그래밍에서 메모리 할당이란, 말그대로, 실행시간 동안 사용할 메모리 공간을 할당하는 것이다.경우에 ...

blog.naver.com

 

다람쥐와 포동포동이

 

 

 

반응형

'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글

DeQueue (데큐,데크)  (2) 2020.04.14
Priority Queue (우선순위 큐)  (0) 2020.04.14
stack (스택 메모리)  (0) 2020.04.14
Generic (제네릭)  (3) 2020.04.12
Deadlock (데드락)  (0) 2020.04.12