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
    评论
内存管理是计算机系统中非常重要的一项任务,它负责管理计算机中的内存资源,有效地分配和回收内存空间,以满足程序的运行需求。C语言是一种底层的编程语言,对内存管理直接由程序员负责,因此了解C内存管理机制非常重要。 C语言中的内存管理主要涉及到动态内存分配和释放的操作。C中有四个关键的内存管理函数:malloc、calloc、realloc和free。 malloc函数用于在堆区分配一块指定大小的内存空间,并返回一个void类型的指针。它的使用格式为:指针变量 = (数据类型*)malloc(需要分配的内存大小)。 calloc函数也用于在堆区分配内存空间,但它还会将分配的内存空间全部初始化为0。它的使用格式为:指针变量 = (数据类型*)calloc(需要分配的内存大小, 每个元素的大小)。 realloc函数用于重新分配已经分配的内存空间的大小。它的使用格式为:指针变量 = (数据类型*)realloc(已分配的内存指针, 新的内存大小)。 free函数用于释放之前分配的内存空间。它的使用格式为:free(需要释放的内存指针)。 此外,C语言中还有一种常见的内存管理问题是内存泄漏。内存泄漏指的是分配的内存空间在不再使用时未被释放的问题,导致系统的内存资源被浪费。为了避免内存泄漏,程序员需要在使用完动态分配的内存后,及时调用free函数释放内存。 总的来说,C语言中的内存管理需要程序员自己负责,理解和掌握动态内存分配和释放的机制,能够正确地使用malloc、calloc、realloc和free函数,避免内存泄漏问题,能够高效地管理内存资源,提高程序的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值