메모리 관리: 프레임 할당
프레임의 할당은 함수를 호출할 때마다 설정되는 "스택 프레임"에서 해당 이름을 사용합니다. 스택 프레임은 함수에 대한 인수와 함수에 로컬로 정의된 변수를 일시적으로 보유하는 메모리 영역입니다. 프레임 변수는 컴파일러가 자동으로 공간을 할당하기 때문에 종종 "자동" 변수라고 합니다.
프레임 할당에는 두 가지 주요 특징이 있습니다. 먼저 지역 변수를 정의할 때 큰 배열 또는 데이터 구조인 경우에도 전체 변수를 보유할 수 있는 충분한 공간이 스택 프레임에 할당됩니다. 둘째, 프레임 변수는 범위를 벗어나면 자동으로 삭제됩니다.
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
로컬 함수 변수의 경우 이 범위 전환은 함수가 종료될 때 발생하지만 중첩된 중괄호를 사용하는 경우 프레임 변수의 범위는 함수보다 작을 수 있습니다. 프레임 변수의 자동 삭제는 매우 중요합니다. 단순 기본 형식(예: int
바이 트), 배열 또는 데이터 구조의 경우 자동 삭제는 변수에서 사용하는 메모리를 회수하기만 하면 됩니다. 변수가 범위를 벗어났으므로 어쨌든 액세스할 수 없습니다. 그러나 C++ 개체의 경우 자동 삭제 프로세스가 좀 더 복잡합니다.
개체가 프레임 변수로 정의되면 해당 생성자는 정의가 발생하는 지점에서 자동으로 호출됩니다. 개체가 범위를 벗어나면 개체의 메모리가 회수되기 전에 소멸자가 자동으로 호출됩니다. 이 자동 생성 및 소멸은 매우 편리할 수 있지만, 특히 소멸자에서 자동 호출을 알고 있어야 합니다.
프레임에서 개체를 할당할 때의 주요 이점은 개체가 자동으로 삭제된다는 것입니다. 프레임에 개체를 할당할 때 메모리 누수를 유발하는 잊어버린 개체에 대해 걱정할 필요가 없습니다. (메모리 누수에 대한 자세한 내용은 문서를 참조하세요.MFC에서 메모리 누수 감지.) 프레임 할당의 단점은 프레임 변수를 범위 외부에서 사용할 수 없다는 것입니다. 프레임 할당과 힙 할당을 선택하는 또 다른 요인은 큰 구조 및 개체의 경우 스택 공간이 제한되는 경우가 많기 때문에 스토리지용 스택 대신 힙을 사용하는 것이 더 낫다는 것입니다.