-
[C++] 메모리와 동적할당(new, delete)C++ 2019. 7. 17. 19:06
동적 할당이란?
컴파일 시점에 사용할 메모리 공간을 미리 지정해두지 않고 프로그램 실행 중에 필요한 시점에, 필요한 만큼의 메모리 공간을 할당하는 것을 말한다. 또한 사용이 끝나면 다시 운영체제가 쓸 수 있도록 반납이 가능하다.
new
123456789#include <iostream>using namespace std;int main(){int *ptr = new int;}cs new 키워드는 입력한 자료형의 크기에 맞춰 OS에게 메모리를 받아온 다음, 그 주소를 반환한다.
즉 포인터 변수로 받아야 한다.
delete
123456789101112131415#include <iostream>using namespace std;int main(){int *ptr = new int;cout << ptr << endl;cout << *ptr << endl;delete ptr;ptr = nullptr;}cs delete 키워드는 OS로부터 받아 사용하고 있는 메모리를 OS에 다시 반납한다.
일반적으로 메모리를 반납하더라도 메모리의 주소는 포인터 변수에 계속해서 남아있는 있으므로 ptr이 null을 가리키도록 한다.
메모리 누수 현상
메모리를 할당받은 뒤 반납하지 않을 경우 누수 현상이 발생한다
123456789101112#include <iostream>using namespace std;int main(){while (true){int *ptr = new int;cout << ptr << endl;}}cs 메모리를 제대로 반납한 경우
1234567891011121314#include <iostream>using namespace std;int main(){while (true){int *ptr = new int;cout << ptr << endl;delete(ptr);}}cs 참고자료
https://www.inflearn.com/course/following-c-plus/dashboard (인프런, 홍정모의 따라배우는 C++)
'C++' 카테고리의 다른 글
[C++] this 포인터 (0) 2019.08.29 [C++] 함수 포인터 (0) 2019.08.27 [C++] Tuple (복수의 값 반환) (1) 2019.08.22 [C++] const 위치에 따른 포인터의 의미 (0) 2019.07.18 [C++] 참조 변수(Reference variable) (0) 2019.07.18