개념
- 사전적 의미로 '아무렇게나 쌓은 더미'
- 프로그래밍 환경에서 원시 자료형이 아닌 보다 큰 크기의 데이터를 담기 위한 동적 할당 메모리 공간
- 객체와 배열이 생성되는 영역
- 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 |