内存管理与B树

内存管理

为了实现这些数据结构在实际的计算机中,我们需要用到计算机内存。计算机内存是一系列简单的字节,它通常由4,8,16字节组成(这依赖于它的电脑)。这个内存字节来自

于0-1,在这中间N是一个内存可利用的数字。这个数字有联系到每个内存的字节作为他本身的地址。因此,这个内存在计算机可视为一个基本的巨大的数组,用这个内存来组成数据接

(并且运行这个程序)要求我们管理这个计算机内存所需要的数据,包括变量、节点、指针、数组以及字符串。我们将要讨论这个内存管理的基础在本章中。

在C++运行栈的时候

C++程序是一个二进制编译文件,他将要在C++运行环境下执行。这个运行环境有提供重要的功能来执行你的程序,例如管理内存以及你的输入和输出。

栈有一个重要的应用在运行C++程序的时候。运行程序是一个私有的栈,这个堆栈将要用来跟踪局部变量以及其他重要的信息功能作为他们在调用执行期的时候。

特别是,在执行程序的时候,这个运行环境维持一个堆栈,这些元素被作为现在的描述符并且调用这个功能,这些描述符号被称为调用框架。这个功能将要调用“fool”功能来

存储现在的局部变量,并且信息功能“cool“用来调用fool。

*跟踪这个程序计数器

你的电脑在运行期间将要维持一个特别的变量,他称之为计算机计数器,他将要跟踪这个机器指令在现在来执行。当这个功能函数cool来调用另一个功能fool(),现在的程序计数器

的值将要记录在现在调用cool的框架里。在顶部的堆栈作为一个运行的函数,这个功能现在有被执行。这些堆栈是个被挂起的功能,这些功能将要调用另一些功能并且现在将要等待它

来返回一个控制的终端。当一个新的功能有实现。这个功能将要入栈。当他有终止的时候,他的功能有出栈并且系统将要这个程序现在将要挂起。

*阐述递归

其中之一有利的使用栈是解释功能,来调用并且允许程序运用递归。他将要允许功能调用他的本身。这是有趣的,早期的程序语言,例如Cobol和Fortran,不是起源用这个运行时间的栈以及程序调用。现在的程序语言,包括现代的经典版本余元比如Cobol和Fortran,利用这个运行时间的栈功能和过程调用。

在这里执行递归功能,每个递归都会对应一个调用堆栈的框架。 最好的解释是怎样在运行期间允许这个递归功能,让我们考虑一下c++的经典递归模式

n!=n(n-1)(n-2)…..1

首先我们将要调用功能factorial,他将要跟踪这个框架包括局部变量存储这个变量n,功能factorial递归调用他本身compute(n-1)!,它将要进入到一个新的框架来调用这个堆栈,这个递归调用它本身compute(n-2)!,这个递归调用,在运行堆栈的时候,有成长空间大小n,因为调用这个factorial(1)将要立即返回1而不是调用她本身。这个运行时间的堆栈允许功能factorial存在的同时在几个活动框架中。每个框架将要存储这个他的变量本身的值作为这个返回。事实上,当这个第一个递归调用终端,他将要返回(n-1)!,然后增加

n到n!对于初始化调用这个factorial功能。

例如:

int recursiveFactorial(int n)

{

    if(n == 0) return 1;

    else return n*recursiveFactorial(n-1);

}

*内存分配到c++

我们现在讨论一下c++运行系统分配这个局部变量的功能。栈并不是唯一可用的内存在c++程序数据,然而。内存能够分配这个动态内存用这个new操作符,他将要建立在c++中,例如,

我们将要熊希如何分配一个整型的数组在C++中。

int* items = new int[100];

在这个方式分配内存,而释放则是”delete[] items“

*内存堆

取代在运行栈的对象内存的操作。c++用这个内存来自另一种存储的方式–内存堆,我们将要阐述这个内存的领域,在其他的内存领域。存储这个变量在内存堆中有分配到,连续的

数组像是”chunks“内存并且可能是一个变量大小。

相似于这些讨论,让我们假设这个内存堆中的块将是一个固定的大小,并且有1024个字节,并且一个块是足够大的对于任何对象,我们可能想要创建它。内存堆必须能够分配内存

块快速的。不同于运行时间用不同的方式,我们要锻炼一个自由的并且可选择的队列来管理这些内存堆。当一个功能用到New操作父调用一个内存块为了一个新对象的时候,这个运行

系统能够表现这个队列的操作在这个队列来调用这个未用的块来提供一个自由的内存块来给到现在的对象。然而,当这个用户释放这个内存的时候,使用”delete”,然后这个运行系统

能够表现为一个队列操作来返回这个块到可用队列中。

*内存分配算法

//………

*垃圾回收

//……..

*指向dfs

//……

**外部内存以及缓存

这些计算机应用必须要处理大量的数据。这个例子包括了scinetific数据指令,以及这些组织和数据库的维护。事实上,这些数据必须要处理这个大的并且完全适合这个

内存电脑。

*内存的层次结构

    原文作者:B树
    原文地址: https://blog.csdn.net/hhh901119/article/details/48374917
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞