1 / 123
文档名称:

数据存储要点.pptx

格式:pptx   页数:123页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据存储要点.pptx

上传人:用户头像没有 2016/3/29 文件大小:0 KB

下载得到文件列表

数据存储要点.pptx

相关文档

文档介绍

文档介绍:《计算基础—— C++ 语言实现》在进行比较复杂的运算时,通常会借助纸张完成运算过程。在利用计算机解决实际问题时,同样需要一些空间来保存待处理的数据、运算的中间结果和运算的最终结果,这些空间就是计算机的内存空间。本章重点介绍计算机中数据存储的基本原理, 以及如何使用 C++ 编写程序操作内存中的数据。通过本章的学****一方面能够掌握计算机中数据存储的基本原理;另一方面能够使用 C++ 提供的指针类型操作内存中的数据,解决实际问题。本章还介绍指针与函数、引用、引用与函数、指针相减运算和关系运算等方面的内容。第6章数据存储 2 人们在进行比较复杂的运算时,通常会借助纸张完成运算过程。在利用计算机解决实际问题时,同样需要一些空间来保存待处理的数据、运算的中间结果和运算的最终结果,这些空间就是计算机的内存空间。内存空间中含有大量的存储单元, 每个存储单元由一个唯一的内存地址标识,可以存放 1个字节的数据,内存地址的编号从 0开始,顺次增 1,图 6-1 内存地址示例即对于容量为 N的内存,其内存地址编号为 0~N-1 ,如图 6-1 所示。 6 .1 数据存储的基本原理 3 在32位系统中,内存地址由 32位二进制数组成,内存地址编号从 0开始、最大为 2 32-1,因此, 32位系统理论支持的最大内存容量为 2 32(=4G )字节。而在64位系统中,内存地址由 64位二进制数组成,因此, 64位系统理论支持的最大内存容量为 2 64(=16777216T )字节。在运行一个程序时,系统将分配给该程序一些内存空间, 根据内存空间中存储的数据类型不同,可将其分为 4个区域。(1)代码区: 存放程序的代码(在运行程序时会先将程序加载到内存的代码区中再执行)。(2)全局数据区: 存放程序中的全局数据和静态数据(在定义全局变量或静态变量时会在全局数据区为其分配内存空间来存储数据) 。 6 .1 数据存储的基本原理 4 (3)堆区: 存放程序中的动态数据(使用动态方式分配内存时会在堆区分配内存空间来存储数据,关于动态内存分配的内容请参阅 节) 。(4)栈区: 存放程序中的局部数据(在定义局部变量时会在栈区为其分配内存空间来存储数据)。定义任何一个变量,系统都会为其分配一定大小的内存空间,访问变量实际上就是访问其所对应内存空间中的数据。 6 .1 数据存储的基本原理 5 例如,在 C++ 中,有如下变量定义语句: 0x61626364; 系统会为 a分配 sizeof (int )=4 字节的内存空间,并且该片内存空间中所存储的数据为 0x61626364 ,如图 6-2 所示。这里数据在内存中按从高字节到低字节的顺序存储,在有的系统中数据在内存中是按从低字节到高字节的顺序存储。如果要编写具有较好移植性、能够在多个系统下运行的程序,就要在编程时考虑这一不同。 6 .1 数据存储的基本原理 6 提示: 32位系统中内存地址由 32位二进制数组成。十六进制数是二进制数的压缩表示形式, 1位十六进制数相当于 4位二进制数,为了简化地址表示, 32位系统中的内存地址通常以 8位十六进制数表示, 如图 6-2 所示。同理, 64位系统中的内存地址通常以 16位十六进制数表示。图6-2 仅为了说明数据在内存中的存储方式。实际上,在定义一个变量时,不同环境下系统为该变量分配的内存空间可能会不同。因此,读者在自己机器上定义变量 a并查看其所对应的内存空间时一般会与图 6-2 所显示的内存地址不一致。在前面的章节中,都是使用通过变量名去访问对应内存中数据的方式。实际上, C++ 还提供了另外一种通过指针直接访问内存中数据的方式。 6 .1 数据存储的基本原理 7 指针是用于存放内存地址的一种数据类型。指针可以是常量,例如数组名就是一个指针常量,表示该数组所占据内存空间的首地址。指针也可以是变量,例如可以定义一个指针类型的变量保存一个内存地址。在程序设计中,可以使用指针常量或指针变量直接操作它们所指向的内存空间中的数据。下面先介绍指针变量的定义、初始化和访问方法。? 指针变量的定义指针是一种存储地址的数据类型,因此,也可以定义指针类型的变量——指针变量。与其他类型的变量一样, 在使用指针变量之前必须先定义,其定义形式为: <数据类型> *<变量名>; 指针 8 其中,<数据类型>表示指针变量所指向内存空间中数据的类型, *表示所要定义的变量为一个指针变量,而不是普通变量。*作用于变量名,表示紧随其后的变量为一个指针变量。例如,要同时定义两个 int 型指针变量 p1和p2,必须写成如下形式:int *p1, *p2; 如果写成: int *p1, p2; 则表示定义了一个指针变量 p1和一个普通变量 p2。 指针