C++语言入门_03内存分配

C++语言入门_03

蓝桥云课学习实录 2021/11/19


前言

C++ 程序在运行时,计算机内存被分为程序代码区、全局数据区、堆区、栈区四个部分。本次实验共有两个内容,一是介绍 C++ 三种内存分配方式,二是使用 new 关键字和 delete 关键字管理堆内存。

知识点
静态存储分配
栈内存分配
堆内存分配
new 关键字和 delete 关键字


一、内存分配的三种方式

不同的内存分配方式,有不同的内存调度机制。C++ 语言的三种内存分配方式分别是:静态存储区分配、栈内存分配和堆内存分配。
静态存储区分配
静态分配方式下的内存在程序编译的时候就已经分配好了且存在于程序的整个运行过程。例如 static 变量,其生命周期随程序的结束而结束,而非像一般变量随函数或作用域的结束而结束。
除了 static 变量,还有一种全局对象 static object,也可以存放在静态存储区。
栈内存分配
栈内存分配方式下的内存是存在于某作用域的一块空间。例如调用某个函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会被自动释放。
函数内局部变量的生命周期:起于变量声明,止于函数执行结束。
堆内存分配
堆内存分配,也称 动态内存分配,通常使用 new 和 delete 关键字进行管理。堆内存空间可由用户手动分配和释放,所以其生存周期由用户指定,较为灵活。但频繁的分配、释放大小不同的堆空间会产生内存碎片。


二、管理堆内存

C 语言中一般使用 malloc() 函数来分配内存空间,free() 函数来释放内存空间。但在 c++ 语言中我们使用 new 关键字来分配内存空间,delete 关键字来释放内存空间。后者在性能等方面优于前者。
在学习使用 new 和 delete 关键字之前我们先初步了解一下指针的概念及其一般形式。
指针是一个变量,其值是另一个变量的地址。指针变量声明的一般形式为

type *pointerVar-name

其中 type 为指针的数据类型,* 是定义指针的关键符,pointerVar-name 指定指针变量名。
例如:char *p,即定义了一个字符型指针变量 p。
指针的另一些基本内容会在后续的实验中详细介绍,本次实验对指针的内容仅做了解。现在我们正式学习 new 关键字delete 关键字
new 关键字
new 关键字用于堆内存的分配,可自动计算所要分配内存空间的大小,其基本使用形式为:

指针变量名 = new 类型

例如:

int *p; //定义一个整型指针变量
p = new int;

其中 p = new int 表示动态分配一个存放整型数据的内存空间,并将其首地址赋给整型指针变量 p,此时省略指针变量 p 前的 *。
delete 关键字
用于堆内存的释放,其基本形式为:

delete 指针变量

例如:

int *p; //定义一个整型指针变量
p = new int;
//省略指针操作过程
delete p;

其中 delete p 表示释放指针变量 p 指向的内存空间,此时省略指针变量 p 前的 *
注意:使用 new 获取的内存空间必须使用 delete 进行释放。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
我们用实例来加深一下 new 和 delete 关键字的使用方式,新建 mans.cpp 文件,输入:

#include <iostream>
using namespace std;
int main()
{
    int *p; //定义一个整型的指针变量 p。
    p = new int; //动态分配一个存放整型数据的内存空间,并将其首地址赋给整型指针变量 p。
    *p = 6; //为指针指向的内存块赋值为 6。
    cout<<*p<<endl; //输出内存块的赋值。
    delete p;//释放指针变量 p 指向的内存空间。
    return 0;
}

程序首先定义了整型指针变量 p,然后使用 new 关键字为其分配 int 型的内存空间,并让指针 p 指向分配的内存空间。随后为内存块赋值为 6,并且输出所赋的值。最后释放指针变量 p。
程序结果为:

6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值