C++内存管理机制

内存五大分区

在这里插入图片描述
1.栈区
程序运行时分配内存。
c++程序运行时分配内存,主要存储函数的参数以及局部变量。
局部变量分配内存时在栈区从高地址到低地址查找空的内存区域进行分配。
局部变量定义在函数内部,当函数调用时分配内存,在函数结束时消亡,内存将自动被释放。
2.堆区
程序运行时分配内存
堆区又称动态内存分配区,主要存储new或者malloc出来的内存,分配内存时在内存的堆区中从低地址到高地址寻找空的内存区域进行分配。
delete或者free后回收内存,如果没有delete或者free操作则在程序运行结束后由操作系统回收内存。
3.全局区
程序编译时分配内存
全局区又称静态区,主要存储程序中的全局变量和一些static的静态变量。全局变量分配内存时在全局区从低地址到高地址查找空闲的内存区域进行分配。
4.常量区
存储字符串常量、整形常量等一些列常量的区域。
5.代码区
存放程序执行的cpu指令。
new或malloc出来的变量动态的分配在堆区中,当delete或free时释放堆区内存空间。

#include<bits/stdc++.h>
using namespace std;
int p=1;//存储在全局已初始化区
int q;//存储在全局未初始化区
void test(int a)
{
    int b,c;
}//a,b,c均存放在栈区中

int main()
{
    int *ps=new int;//ps存储在栈区中,new出来的内存存储在堆区中
    char str[20]="123456";//str存储在栈区,“123456”为字符串常量存储在常量区
    delete ps;
    return 0;
}

存储方式

存储方式分为如下三种:
1.自动存储
在函数内部定义的常规变量以及函数的参数使用自动存储空间,随着函数的调用分配空间,随着函数的结束释放内存空间。
2.静态存储
静态存储是整个程序执行期间都存在的存储方式。全局变量以及一些声明比哪里那个时使用了static关键字的变量采用静态存储。
3.动态存储

hint

正在运行的C程序 = 代码段+初始化数据段(data)+未初始化数据段(BSS)+堆+栈
编译时确定分配多少代码段+初始化数据段+未初始化数据段+栈。
数据段 – data
data包含静态初始化的数据,所以有初值的全局变量和static变量在data区。段的起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你的程序大小没有关系,但和程序使用到的全局变量,常量数量相关。数据段属于静态内存分配。
bss段–bss
bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。BSS段属于静态内存分配。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值