Instance 생성 방법
// Stack에 만들기 (Heap 보다 빠름)
Vector a;
// Heap에 만들기 (느림)
Vector *b = new Vector();
스택 메모리 간단한 설명
- 예약된 로컬 메모리 공간(일반적으로 1MB 이하)
- 함수 호출과 반환이 스택 메모리에서 일어난다.
- 스택 포인터를 단순히 옮기는 것.
- 메모리 할당 및 해제 필요 없다.
- 스택에 할당된 메모리는 범위를 벗어나면 사라진다.
- 변수 및 매개변수 크기는 컴파일 도중에 알 수 있다.
- 큰 개체를 많이 넣으면 스택오버플로우가 일어날 수 있다.
- 성능이 느려질 수 있다.
힙 메모리 간단한 설명
- 전역 메모리 공간(크다)
- 연속된 메모리 블록을 찾아야 한다.
- 프로그래머가 메모리 직접 할당 및 해제
- 메모리 누수 주의
코드 예제
스택에 생성하기
// 값에 의한 복사보다 참조에 의한 복사가 빠를 것이라는 가정.
Vector AddVector(const Vector& a, const Vector& b)
{
Vector result;
result.mX = a.mX + b.mX;
result.mY = a.mY + b.mY;
return result;
}
void Foo()
{
Vector c = AddVector(a, b);
}
힙에 생성하기
Vector AddVector(const Vector& a, const Vector& b)
{
Vector *result = new Vector;
result->mX = a.mX + b.mX;
result->mY = a.mY + b.mY;
delete result; // 힙 영역 할당 해제를 해주어야 함
}
void Foo()
{
AddVector(a, b);
}
RAII 원칙
: Resource Acquisition Is Initialization
할당과 해제를 한 스코프 안에서 해주자는 것을 지향하자는 원칙이다.
개체 배열 생성
Vector *list = new Vector[10];
- 자바는 오브젝트를 스택에 만들 수 없다.
- C++는 Vector를 담을 포인터 배열을 만들어 heap에 객체 배열을 만들 수 있다.
개체 배열 소멸
Vector *a = new Vector;
Vector *list = new Vector[10];
delete a; // 메모리 즉시 해제
a = NULL; // 댕글링 포인터
delete[] list; // []를 반드시 넣어 주어야 함
list = NULL; // 댕글링 포인터
멤버 변수 초기화
class Vector
{
private:
int mX;
int mY;
};
- 값이 초기화되지 않는다.
- 메모리에 이전에 들어있던 값이 그대로 존재한다.
'Language > C++' 카테고리의 다른 글
[C++] 10.Unmanaged Programming: 소멸자(Destructor) (0) | 2024.01.23 |
---|---|
[C++] 9.Unmanaged Programming: 생성자(Constructor) (0) | 2024.01.23 |
[C++] 7.Unmanaged Programming: Class (0) | 2024.01.23 |
[C++] 6.Unmanaged Programming: 파일 입출력 (1) | 2024.01.23 |
[C++] 5.Unmanaged Programming: 문자열(string) (0) | 2024.01.21 |