[溢价收购]动态内存管理 – C++快速入门33

动态内存办理

让编程改动国际

Change the world by program

动态内存办理

到目前为止不了,小王八给咱们所解说的每一个示例程序在完结它的使命时所运用的内存空间都是固定不变的。

这个固定不变的内存空间其不实是在编写程序时分就可以知道和确认(一般以变量的办法)。

这些程序都不能再程序运转期间动态添加或削减内存空间。

但小时分,性感而卡哇伊的物理教师告知咱们:这个时刻没有彻底停止的东西!实践国际是动态的!

所以,C++也有必要支撑动态办理内存,而这节课,小王八正式要跟咱们介绍这个。

你见过要求用户输入的文本有必要不多不少包含多少个字符的程序吗?不可能吧?!

在许多时分,需求存储的数据量到底有多大在事前往往是一个未知数,要想处理好这类状况,就需求在C++程序里运用动态内存。

动态内存支撑程序猿创建和运用种种可以依据详细需求扩大和缩小的数据结构,它们只受限于计算机的硬件内存总量和体系特别束缚。

接下来,咱们将学到如何故这种灵敏的办法与内存打交道。

静态内存

静态内存便是咱们此前一直在运用的东西:变量(包含指针变量)、固定长度的数组、某给定类的目标。

咱们可以在程序代码里经过它们的姓名或许地址来拜访和运用它们。

运用静态内存的最大坏处是,你不得不在编写程序时为有关变量分配一块尽可能大的内存(以防不行寄存数据)。

一旦程序开端运转,不论实践状况如何,那个变量都将占用那么多的内存,没有任何办法能改动静态内存的巨细。

动态内存

动态内存由一些没有姓名、只要地址的内存块构成,那些内存块是在程序运转期间动态分配的。

它们来自一个由规范 C++ 库替你办理的”大池子”(装B术语称之为”内存池”)

从内存池请求一些内存需求用 new 句子,它将依据你供给的数据类型分配一块巨细恰当的内存。

你不用忧虑内存块的尺度问题,编译器可以记住每一种数据类型的单位长度并敏捷计算出需求分配多少个字节。

假如有满意的可用内存能满意你的请求,new 句子将回来新分配地址块的开始地址。

假如没有满意的可用内存空间?那么 new 句子将抛出 std::bad_alloc 反常!

留意在用完内存块之后,应该用 delete 句子把它还给内存池。

别的作为一种附加的稳妥办法,在开释了内存块之后还应该把与之相关的指针设置为NULL。

图说编程:

int *i = new int;

int *i = new int;

delete i;

delete i;

i = NULL;

i = NULL;

NULL指针

有一个特别的地址值叫做 NULL 指针。当把一个指针变量设置为 NULL 时,它的意义是那个指针将不再指向任何东西:

int *x;

x = NULL; // x 这时分啥都不指向

咱们无法经过一个被设置为 NULL 的指针去拜访数据。

事实上,企图对一个 NULL 指针进行解引证将在运转时被坚持到并将导致程序中止履行。

[溢价收购]动态内存管理 – C++快速入门33

所以在用 delete 开释内存后,指针会保存一个毫无意义的地址,咱们要将指针变量赋值为 NULL。

pay attention

请留意,静态内存这个术语与 C++ 保存字 static 没有任何关系。

静态内存意思是指内存块的长度在程序编译时被设定为一个固定的值,而这个值在程序运转时是无法改动的。

new 句子回来的内存块很可能充溢”废物”数据,所以咱们一般先往里边写一些东西掩盖,再拜访它们,或许在类直接写一个结构器来初始化。

在运用动态内存时,最重要的原则是每一条 new 句子都有必要有一条与之配对的 delete 句子,没有配对的 delete 句子或许有两个配对的 delete 句子都归于编程缝隙。(特别前者,将导致内存走漏)

为目标分配内存

为目标分配内存和为各种根本数据类型(int, char, float…)分配内存在做法上彻底相同。

用 new 向内存池请求内存

用 delete 来开释内存

这个概念其实咱们老早前就给咱们演示了:在虚函数那一讲中有木有?!

咱们再用一个栗子给咱们稳固稳固之前的常识:

Example.cpp(课件及源代码下载)

pay attention

搞目标的时分,千万不要忘掉把办法声明为虚办法,如仍有疑问请回忆《C++快速入门》第二十三讲 —— 虚办法。

在从头运用某个指针之前千万不要忘掉调用 delete 句子,假如不这样做,那个指针将得到一个新内存块的地址,而程序将永久也无法开释原先那个内存块,由于它的地址现已被掩盖掉了。

请记住,delete 句子只开释给定指针变量正指向的内存块,不影响这个指针。

在履行 delete 句子之后,那个内存块被开释了,但指针变量还仍然健在哦。

视频下载

备用视频下载
技能, IT技能, CPP, 视频教程
发布于 2024-02-02 15:02:57
收藏
分享
海报
1
目录