C++程序的内存分区,使用动态内存动态内存分配、释放

为什么要使用动态内存

1.按需分配,根据需要分配内存,不浪费

new 分配内存布局图
在这里插入图片描述
2. 被调用函数之外需要使用被调用函数内部的指针对有应的地址空间

C 内存分配:
void *malloc(size_t size);
void free(void *);
malloc 在内存的动态存储区中分配一块长度为 size 字节的连续区域返回该区域 的首地址.

3.突破栈区的限制,可以给程序分配更多的内存

动态内存的分配、使用、释放

new 和 delete 基本语法

  1. 在软件项目开发过程中,我们经常需要动态地分配和撤销内存空间,特 别是数据结构中结点的插入与删除。在 C 语言中是利用库函数 malloc 和 free 来 分配和撤销内存空间的。C++提供了较简便而功能较强的运算符 new 和 delete 来 取代 malloc 和 free 函数。 (注意: new 和 delete 是运算符,不是函数,因此执行效率高。)

  2. 虽然为了与 C 语言兼容,C++仍保留 malloc 和 free 函数,但建议用户不 用 malloc 和 free 函数,而用 new 和 delete 运算符。

  3. new 运算符的例子:
    new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
    new int(10); //开辟一个存放整数的空间,并指定该整数的初值为 10,返回一个指向该存 储空间的地址
    new char[100]; //开辟一个存放字符数组(包括 100 个元素)的空间,返回首元素的地址 new int[5][4]; //开辟一个存放二维整型数组(大小为 5*4)的空间,返回首元素的地址
    float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的 初值为//3.14159,将返回的该空间的地址赋给指针变量 p

  4. new 和 delete 运算符使用的一般格式为:
    在这里插入图片描述

C++程序员的噩梦-内存泄漏
  1. 内存泄漏(Memory Leak) - 是指程序中己动态分配的堆内存由于某种原因程序未释放或 无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

  2. 变量的 4 种存储类型
    所有的数据都有两种类型 数据类型: 如 int,float 等

  3. 存储类型: 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量 (static)、外部变量(extern)以及寄存器变量(register)。

  4. auto - 函数中所有的非静态局部变量。

  5. register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设 置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存 中的非 register 变量。

  6. static - 在变量前加上 static 关键字的变量。

  7. extern - 把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变 量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。

变量的作用域和生存周期

在这里插入图片描述

  1. 函数返回值使用指针
    可以返回函数内部:动态分配内存地址 局部静态变量地址 以及全局静态变量和外部变量 地址
常见错误总结
  1. 申请的内存多次释放
  2. 内存泄漏
  3. 释放的内存不是申请时的地址
  4. 释放空指针
  5. 释放一个内存块,但继续引用其中的内容
  6. 越界访问

在这里插入图片描述

一年入门,三年入行,五年入道,七年入定,十年入化

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Respect@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值