동적할당

동적 메모리 할당으로 사용자가 임의로 원하는 역역만큼 메모리에 할당하는 기법

지역적, 전역적으로 접근 가능하며 변동적이기 때문에 메모리 힙 영역에 적재된다.

 

C와 C++은 다른 언어와 달리 포인터를 사용하여 메모리를 직접 관리할 수 있다는 장점이 있다.

C에서는 malloc()과 free()라는 함수로,

C++에서는 new와 delete라는 연산자를 활용하여 메모리를 관리합니다.

 

동적할당이 필요한 경우

1. 일시적으로 갑자기 많은 메모리를 잡아야 하는 경우

  ▷ 프로그램을 실행하게 되면 RAM에서 돌게 되는데 RAM의 메모리 자원은 한정적이다.

  ▷ 하지만, 어떤 프로세스가 많은 메모리를 필요요 하는데 계속 가지고 있다면 그만큼 메모리 효율성이 떨어진다.

  ▷ 너무 많은 메모리를 할당하게 되면 crash가 발생할 위험이 있다.

  ▷ 그렇기에 원할 때 메모리를 할당했다가, 필요 없어지면 해지할 수 있는 메모리 할당이 효율적이다

2. 함수 리턴 이후에도 메모리 할당이 살아있게 하기 위해

  ▷ 일반적인 변수나 함수의 경우 stack 영역에 메모리 공간이 할당되지만, 스코프(범위)를 벗어나면 사용할 수 없다.

  ▷ 하지만 동적할당은 stack에 저장되지 않고 heap영역에 저장되기에 함수리턴 이후에도 메모리 할당이 가능하다.

3. 미리 길이를 알 수 없는 배열을 저장해야 할 경우

 

newdelete

//메모리 할당 사용방법

타입* 변수명 = new 타입; //메모리 할당

delete 변수명 // 메모리 할당해제
#include <iostream>
using namespace std;

int main()
{
    int* point = new int; // 메모리 동적할당
    *point = 100 // 여기서 *는 역참조연산자(point라는 주소가 가리키는 값으로 가겠다라는 의미)
    
    cout << *point << endl;
    
    delete point; // 메모리 할당해제
}

메모리를 할당하고 해제하는 방법은 위와 같다.

메모리 해제는 할당하는 역순으로 진행하면 된다.

 

메모리를 할당한 이후에 해제를 해줘야 이후 메모리 누수가 안 생겨난다.

 

가비지 컬렉션

메모리 관리 방법 중 하나로, 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 자동으로 찾아내어 해제하는 기능이다.

 

가비지 컬렉션 장점

1. 유효하지 않는 포인터 접근을 방지

2. 이중 해제로 이미 해제된 메모리를 또다시 해제하려고 하면 문제가 생길 수 있다.

3. 메모리 누수로 더 이상 필요하지 않은 메모리가 해제되지 않고 남아있게 되면, 사용할 수 있는 메모리가 적어져서 프로그램에 문제가 생길 수 있다.

 

가비지 컬렉션 단점

1. 어떤 메모리를 해제할지 결정하는데 비용이 든다. 객체가 필요 없어지는 시점을 프로그래머가 미리 알고 있더라도 가비지 컬렉터가 추적해야 하기에 오버헤드가 된다.

2. 작동되는 타이밍이나 점유 시간을 예측하기 어렵다.

3. 할당된 메모리가 해제되는 시점을 알 수 없다. 

'C++' 카테고리의 다른 글

C++ vector  (0) 2023.03.29
C++ 객체지향 프로그램  (0) 2023.03.28
프로세스 메모리  (0) 2023.03.17
C++ 포인터, 역참조  (0) 2023.03.17
Call by value, Call by reference, 참조자  (0) 2023.03.16

+ Recent posts