内存管理:帧分配
在框架的分配因其设置为 “堆栈帧”名称,只要函数调用。 堆栈帧是暂时保留参数传递给函数以及任何变量是定义的本地函数内存区域。 ,因为编译器自动将其分配的空间,框架变量通常称为 “自动”变量。
具有帧分配的两个主要特征。 首先,那么,当您定义一个局部变量时,足够的空间在堆栈帧分配保存整个变量,因此,即使它是一种大数组或数据结构。 接下来,那么,当它们超出范围时,框架变量自动删除:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
对于本地函数变量,此范围转换时,会发生该函数退出,但是,框架变量的大小小于函数,则使用嵌套的大括号。 框架变量的此自动删除非常重要。 对于简单的基元类型 (例如 int 或 byte),数组或数据结构,自动删除还原该变量使用的内存。 因为变量超出了范围,则不能以任何方式进行访问。 对于 C++ 对象,但是,自动删除过程更为复杂。
当对象定义为框架变量时,其构造函数调用将自动在定义遇到的点。 当对象超出范围时,此析构函数自动调用,对象的内存之前还原。 此自动构造和析构非常方便,但是,您必须了解自动调用,特别是到析构函数。
分配到框架中对象的主要优点是将自动删除。 当您将自己的框架中的对象,不必担心导致内存泄漏的保留下来的对象。 (有关内存泄漏的详细信息,请参见中的文章 在 MFC 中检测内存泄漏。)框架分配的缺点是框架变量不能在它们的范围之外使用。 在选择帧分配的另一个因素与堆分配是大结构的,并且对象,使用堆而不是堆栈用于存储通常最好,因为堆栈空间通常是有限的。