동적할당 : 프로그램 실행 중에 메모리를 할당하는 방법을 의미한다. 주로 new 구문을 이용.
int main()
{
for (int i = 0; i < 10; i
{
int temp = i;
cout << temp << endl;
}
}
이 경우의 변수 temp는 루프문이 실행될 떄마다 할당되는 것이 아니라, 이미 할당이 완료된 상황에서 매 루프마다 다시 초기화되는 것에 불과하다는 의미 -> 컴파일러가 코드를 해독하고 나서 프로그램을 만들 떄 이미 변수를 할당했다는 것이다.
이는 조건문 등으로 인해 실제로 이 코드가 실행되는 일이 없다 할 지라도 무조건 컴파일러가 할당하게 된다. 따라서 경우에 따라서는 만들었음에도 쓰이지 않는 변수가 될 수 있다.
int main()
{
int* temp;
for (int i = 0; i < 10; i
{
temp = new int(i);
cout << *temp << " : " << temp << endl;
delete temp;
}
}
그런데 이번엔 포인터로서 만들고, 할당하는 주소 대신 new int(i)라는 구문을 넣었더니 위와 변수의 값은 동일한데 주소가 전혀 다른 변수들이 생성되어 출력되는 걸 확인할 수 있었다. 바로 이 new 구문이 동적 할당 전용 키워드이다. i라는 값을 가진 int 변수를 동적 할당하여, 그 주소를 temp에 저장한다는 뜻이다.
기존에 동적 할당이 아니라 그냥 할당했던 변수들의 경우엔 사용이 끝난 변수는 그 사용이 끝난 시점에서 컴파일러가 더 이상 사용하지 않는다 판단하여 알아서 할당을 해제해 다른 용도로 쓸 수 있게 해준다. 하지만 동적 할당은 컴파일 단계가 아닌 실행파일 실행 단계에서 주소가 할당되기 떄문에 이미 이 시점에서 컴파일러는 프로그램에서 손 뗀지 오래라 이를 예측해 작업한다는 게 불가능하다. 따라서, 이렇게 동적 할당된 것을 접근할 수 없게 되기 전에 지워두지 않으면 프로그램 내부에 항상 상주하게 되어 시스템의 남은 자원을 계속해서 잡아먹게 되고 다른 작업에 사용할 수 있는 자원이 그만큼 줄어들게 되는 것. 이를 "메모리 누수"라고 한다. 이를 막기 위해 동적 할당된 변수를 delete를 이용해 할당 해제를 해야 한다.
'C++' 카테고리의 다른 글
C++) 상속 (0) | 2025.01.10 |
---|---|
C++) 클래스(Class) (0) | 2025.01.08 |
C++) 포인터(Pointer) (0) | 2025.01.06 |
C++) 인터페이스(Interface) (0) | 2024.12.26 |
C++) 템플릿(Template) (0) | 2024.12.26 |