동적 할당 메모리
프로그램에서의 메모리
스택(Stack)
- 지역 변수 할당 (정적할당)
- 시스템에 의해 관리
힙(Heap)
- 동적 메모리 할당
- 개발자에 의해 관리
new, delete
new
- 동적으로 힙에 메모리를 할당
delete
- 동적으로 힙에 할당된 메모리를 회수
- 파괴자가 호출됨
- 동적 메모리를 회수 하지않으면 가비지(garbage) 증가 -- 메모리 누수
class T {}; T *p = new T; T *p = new T[N]; T *p = new T[N] { initializer1, ... , initializeerN};
int *p; p = new int[5]; int *p = new int[5] {0, 1, 2, 3, 4};
int *p = new int; : delete p; // 단일 데이터 삭제 int *p = new int[5] {0, 1, 2, 3, 4}; delete [] p; // 배열 데이터 삭제
new, delete
#include <iostream> #include <time.h> using namespace std; int main() { int *ptr; srand(time(NULL)); ptr = new int[10]; // ptr은 할당된 동적 메모리의 시작 주소, // 따라서 ptr은 첫 번째 엘리먼트(ptr[0])에 대한 포인터 // *ptr은 ptr[0]과 같음 for (int i = 0; i < 10; i++) { ptr[i] = rand(); } for (int i = 0; i < 10; i++) { cout << ptr[i] << " "; } cout << endl; delete []ptr; return 0; }
10172 30097 1329 24679 4151 23900 15709 28541 10597 30398
가비지(garbage)
#include <iostream> #include <time.h> using namespace std; int main() { int *ptr = new int; *ptr = 99; return 0; }
스마트 포인터
포인터의 동적 메모리 회수를 자동으로 처리해줌
- 포인터 변수가 제거될 때 자동으로 delete 호출
#include <memory>
추가 후 사용unique_ptr
- 포인터에 대해 오직 하나의 소유자만 허용
unique_ptr buf(new int[10]);
shared_ptr
- 참조 횟수가 계산되는 스마트 포인터
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int[]> buf(new int[10]);
for (int i = 0; i < 10; i++)
{
buf[i] = i;
}
for (int i = 0; i < 10; i++)
{
cout << buf[i] << " ";
}
cout << endl;
return 0;
}
0 1 2 3 4 5 6 7 8 9
'IoT 디바이스 활용 > C++' 카테고리의 다른 글
C++ - 복사생성자와 정적멤버 (0) | 2020.10.12 |
---|---|
C++ - 객체의 동적 생성 (0) | 2020.10.12 |
C++ - 포인터 (0) | 2020.10.12 |
C++ - 객체 배열, 벡터 (0) | 2020.10.12 |
C++ - 객체와 함수 (0) | 2020.10.12 |
댓글