• 初识Cpp之 六、内存分配


    六、内存分配

    ​ 在C语言中使用的是一套内存分配库函数malloc、calloc、realloc、free来进行内存分配和回收,在C++中仍然可以这样做,但是C++还有更好的方法——new运算符。

    (1)C++的内存分区模型

    ​ C++程序在执行的时候,将内存大致分为4个区域

    • 代码区:存放函数体的二进制代码,由操作系统进行管理;
    • 全局区:存放全局变量和静态变量以及常量,常量包括const修饰的全局常量和字符串常量;
    • 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等;
    • 堆区:由程序员分配和释放,若程序员不释放,则程序结束时由操作系统来释放。

    ​ 注意事项:

    1、栈区存放局部变量——函数不要返回局部变量的指针或者引用

    2、堆区主要用C++的new关键字来开辟空间和释放空间。

    (2)使用new进行内存分配

    ​ 使用C++的内存分配运算符new,程序员需要告诉程序new,需要为哪种数据类型分配内存,new将找到一个长度正确的内存块,然后会返回该内存块的地址。例如:

    typeName *pointer_name = new typeName;		//通用写法
    typeName *pointer_name = new typeName(init_value);	//开辟一块空间并且初始化为init_value
    
    • 1
    • 2
    int *pt = new int;		//为pt指针分配了一个int大小的内存空间
    double *pd = new double(5.0);		//为pd指针分配了一个double大小的空间并且初始化为5.0
    
    • 1
    • 2

    当没有足够的内存空间来进行分配的时候,new会返回一个空指针,我们可以判断new是否返回空指针来判断内存分配是否成功。

    使用new创建动态数组:只要将数组的元素类型和元素数目告诉new,必须在类型名后面加上方括号[],其中包含元素数目。

    typeName *pointer_name = new typeName [ArrySize];		//通用写法
    
    • 1

    当程序使用完new分配的内存块时,应该使用delete来释放它们,对于使用new创建的数组,应该使用另一种格式的delete来释放,delete后面必须加上方括号[]

    delete [] pointer_name;		//通用写法
    
    • 1

    举个示例:

    int *pt = new int[20];		//分配空间
    delete [] pt;			//释放空间
    
    • 1
    • 2

    (3)使用delete释放内存

    ​ C++的内存释放运算符deletedelete的作用是释放已经使用new进行内存分配的空间(不要尝试释放已经释放的内存块,这样做的结果是未定义的)。但是对空指针NULL使用delete是安全的,例如:

    int *ps = new int;
    int *pt = NULL;
    delete ps;			//释放ps指向的内存空间
    delete pt;			//释放空指针是安全的
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    第十四届蓝桥杯ABD题
    Elasticsearch 批量导入数据
    Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!
    【Redis】Redis 数据结构介绍
    tkinter制做一个音乐下载小软件,多种音乐免费听
    【Apache Flink】实现有状态函数
    云厂商 RDS MySQL 怎么选
    react 初级基础
    力扣第50天--- 第84题
    Java框架详解3——Spring的存入对象和取出
  • 原文地址:https://blog.csdn.net/qq_44940689/article/details/126680185