ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 메모리와 동적할당(new, delete)
    C++ 2019. 7. 17. 19:06

    동적 할당이란?

    컴파일 시점에 사용할 메모리 공간을 미리 지정해두지 않고 프로그램 실행 중에 필요한 시점에, 필요한 만큼의 메모리 공간을 할당하는 것을 말한다. 또한 사용이 끝나면 다시 운영체제가 쓸 수 있도록 반납이 가능하다.

     

    new

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int *ptr = new int;
    }
     
    cs

    new 키워드는 입력한 자료형의 크기에 맞춰 OS에게 메모리를 받아온 다음, 그 주소를 반환한다.

    즉 포인터 변수로 받아야 한다.

     

     

    delete

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #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을 가리키도록 한다.

     

     

    메모리 누수 현상

    메모리를 할당받은 뒤 반납하지 않을 경우 누수 현상이 발생한다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        while (true)
        {
            int *ptr = new int;
            cout << ptr << endl;
        }
    }
    cs

     

     

    메모리를 제대로 반납한 경우

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #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
Designed by Tistory.