C++内存模型

C++内存模型

​ C++内存由高地址到低地址依次是栈区(向下增长,用于存放函数内的局部变量,形参和函数返回值。系统会自动管理栈区的内存分配与回收)、堆区(向上增长,由程序员主动申请和释放,容易造成内存泄漏)、静态区(也叫全局区,静态变量和全局变量的存储区域一样,静态区的内存直到程序完全结束才会被释放)、常量区(用于存放常量)、代码区(用于存放代码)

分成多个区的原因

​ 通过对不同数据进行分类,可以方便访问、节约空间和方便管理。对于临时数据和多次使用的代码因为生命周期短,因此放入栈区。全局和静态变量可能在整个程序中都需要访问,因此需要单独管理。堆区可由用户自行分配方便管理

栈区

​ 栈区内存由系统自动分配释放,栈区是先进后出原则,且栈区地址是向下增长的。

堆区

​ 堆区是向上增长的,因此后申请的内存地址会依次增大

静态区(全局区)

​ 静态全局变量、静态局部变量、全局变量都存储在静态区。若未初始化,那么系统会自动为其初始化为0。对于静态局部变量来说,多次调用函数编译器只会为第一次初始化分配内存。

常量区

​ 用于存储常量,不可被修改。举个例子:

char *p = "abc";
//此时指针变量p存储在栈区,而它指向存储在常量区的字符串常量"abc",我们可以改变p的指向,但是不可以改变指向的内容

char s[] = "abc"
//定义了一个字符串数组s,存储在栈区,它的内容是通过字符串常量“abc”拷贝过去的。因此可以改变s中的内容

代码区

​ 代码区的内存由系统控制,用于存放程序编译后的指令。函数的名称也是一个指针,可以通过查询函数名所处的内存地址,查询函数存放的地址

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值