C++学习笔记-堆内存栈内存20210602

列如我们有以下程序

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所指向的内存空间。
通过mallocfree操作的内存称之为堆内存。
其它实例

//栈中实例化对象,运行结束后不释放
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;

发表回复

CAPTCHAis initialing...