Поделиться через


Управление памятью: выделение кадров

Выделение кадра берет свое имя из "кадра стека", который настраивается при каждом вызове функции. Кадр стека — это область памяти, которая временно содержит аргументы функции, а также любые переменные, определенные локально для функции. Переменные кадра часто называются "автоматическими" переменными, так как компилятор автоматически выделяет пространство для них.

Существует два ключевых признака выделения кадров. Во-первых, при определении локальной переменной достаточно места выделяется на кадре стека для хранения всей переменной, даже если это большой массив или структура данных. Во-вторых, переменные кадров автоматически удаляются при выходе из область:

void MyFunction()
{
   // Local object created on the stack
   CString strName;
   // Object goes out of scope and is deleted as function ends
}

Для переменных локальной функции этот область переход происходит при выходе функции, но область переменной кадра может быть меньше функции, если используются вложенные фигурные скобки. Это автоматическое удаление переменных кадра очень важно. В случае простых примитивных типов (например int , байтов), массивов или структур данных автоматическое удаление просто освобождает память, используемую переменной. Так как переменная выходит из область, доступ к ней в любом случае невозможен. Однако в случае объектов C++ процесс автоматического удаления немного сложнее.

Когда объект определяется как переменная кадра, его конструктор автоматически вызывается в точке обнаружения определения. Когда объект выходит из область, его деструктор автоматически вызывается перед восстановлением памяти для объекта. Это автоматическое строительство и уничтожение может быть очень удобно, но вы должны знать об автоматических вызовах, особенно деструктору.

Ключевое преимущество выделения объектов в кадре заключается в том, что они автоматически удаляются. При выделении объектов на кадре не нужно беспокоиться о забытых объектах, вызывающих утечку памяти. (Дополнительные сведения об утечках памяти см. в статье Обнаружение утечки памяти в MFC.) Недостатком выделения кадров является то, что переменные кадра нельзя использовать за пределами их область. Еще одним фактором выбора выделения кадров и выделения кучи является то, что для больших структур и объектов часто лучше использовать кучу вместо стека для хранения, так как пространство стека часто ограничено.

См. также

Управление памятью