列如我们有以下程序
int main(int argc,char** argv){
int a=10;
{
int b=5;
}
}
其中以上程序会经历以下过程
1.栈内存创建栈内存,2.栈内存压入内存a,3.栈内存压入内存b,4.栈内存释放内存b.栈内存释放内存a。
栈内存也成为自动变量,‘自动’提现在自动创建和释放上,释放机制表现为先入后出机制。
我们再将上述代码进行改造
int main(int argc,char** argv){
int a=10;
int* b;
{
b=(int*)malloc(4);
}
*b=5;
free(b);
}
其中以上程序会经历以下过程
1.创建栈内存,2.栈内存压入内存a,3.栈内存压入内存指针b,4.堆内存创建4字节空间并将内存地址赋值给b,5.指针b指向的内存空间赋值,6.释放指针b所指向的内存空间。
通过malloc
和free
操作的内存称之为堆内存。
其它实例
//栈中实例化对象,运行结束后不释放
MObj obj;
//栈方式访问变量
obj.x=1;
MObj objs[20];
//栈方式访问数组对象并赋值变量
objs[1]->x=1;
//堆中示例化对象与数组
MObj *obj1=new MObj();
//堆方式访问变量
obj1->x=1;
MObj *objs1=new MObj[20];
//堆方式访问数组对象并赋值变量
objs1[1]->x=1;
//释放堆中示例化的空间
delete obj1;
delete []objs1;