Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 도서
- 프로그래밍
- command
- linux
- ListTile
- 책
- 유데미 코리아
- flutter
- copyWIth
- 개발
- 리버팟
- ExpansionTile
- 개발자
- vscode
- 파이썬
- 플러터
- Code Generation
- python
- 맥
- 가상환경
- 유데미
- 유데미 러닝크루
- freezeD
- dart
- 디자인패턴
- 다트
- 코딩
- 명령어
- riverpod
- 리눅스
Archives
- Today
- Total
승상의 코딩 블로그
[C++] 객체 생성 (스택/힙) 본문
C++ 에서 객체 생성을 할 때, 아래 두 방법을 본적이 있을 것이다. 두 방법의 장단점을 알아보자.
- Point a; // 스택
- Point* b = new Point(); // 힙
Stack 객체 생성
Point a; // 스택 객체 생성
장점.
스택에 생성하기 때문에 빠르다.(힙과 달리 메모리를 찾는 것이 아니라, 스택포인터를 옮기기 때문이다)
할당되는 메모리의 크기를 컴파일 시점에 미리 알게 되므로 런타임에 메모리를 계산할 필요도 없다.
스택은 메모리가 덮어씌어지기 때문에 메모리를 해제도 필요없다.
단점.
스택은 메모리의 공간이 작다(설정에 따라 다르지만, 대략 1MB). 그래서 스택 오버플로우가 생길 수 있다.
함수 내부에서 Stack 에 객체를 생성할 경우, 함수의 사용과 함께 사라진다.
이 값을 반환할 경우, 복사된 객체가 반환된다. 따라서, 함수 내부의 객체와 반환되는 객체는 다른 메모리 주소를 가진다.
Heap 객체 생성
Point* b = new Point();
delete b
장점.
메모리 공간이 매우 크다.
단점.
비어있는 메모리를 찾아야하므로 느리다.
할당된 메모리를 직접 해제해야한다. (new 와 delete 는 같이 사용됨) 그렇지 않으면 메모리 누수가 발생한다.
힙에 객체를 생성하면 함수가 종료된다고 힙의 객체가 자동으로 해제되지 않는다.(사용 후에는 delete 를 사용하여 메모리 누수를 방지해야 한다.)
그러므로, 힙에 생성된 객체의 주소를 반환하면 동일한 객체를 공유할 수 있다.
반응형
'C++' 카테고리의 다른 글
[C++] 클래스의 const 멤버함수 (0) | 2024.09.17 |
---|
Comments