C++ 内存与指针

本文介绍了C++中的内存管理,包括堆、栈、全局/静态存储区、自由存储区和常量存储区的特性及使用。重点讲解了堆的动态分配与释放,以及栈上局部变量的自动管理。同时,还阐述了指针的概念,如指针的类型、赋值、强转和解引用等基本操作。
摘要由CSDN通过智能技术生成

内存管理基础

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
1、全局/静态存储区
全局变量和静态变量被分配到同一块内存中,在以前的c语言中,全局变量又分为初始化的和未初始化的,在c++里面没有这个区分了,他们共同占用同一块内存。
2、常量存储区
这是一块比较特殊的存储区,里面存放的是常量,不允许修改。
静态常量区: 只读,大小固定,无法管理

3、堆
由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表
堆的大小较大,甚至可以申请到内存消耗完;主动分配,主动回收;堆地址想着地址增大方向发展,
堆的分配/回收方式:
malloc/calloc ->free
new ->delete
new T[] ->delete[]T

4、栈
由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区。里面通常是局部变量,函数参数等。
被动分配,被动回收,大小由系统限制,
栈的内存地址是,下面地址大,上面地址小,
且在函数体内不要定义特别大的数据和矩阵。
大小在运行期有一个动态调整过程。
5、自由存储区
由malloc等分配的内存块,和堆十分相似,不过它使用free来结束自己的生命。

在这里插入图片描述

指针

指针指向内存:
int:4个字节
char:1个字节

在这里插入图片描述

指针的基本操作:
赋值
强转:

解引用:

	int e = 10;
    int* p = &e;        //p是e的指针;
    int** pp = &p;      //pp是指向指针的指针
    int*** ppp = &pp;   //ppp是指向指针的指针的指针
    //解引用
    int ee = *(*(*ppp));
    cout<<"ee="<<ee<<endl;   //运行结果:ee=10

加减

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值