程序原本(三十三):程序设计的核心思想——数据结构:顺序存储(在更大的区域中表示完整含义)

阅读数:37 2019 年 9 月 28 日 18:22

程序原本(三十三):程序设计的核心思想——数据结构:顺序存储(在更大的区域中表示完整含义)

上述这些被我们的语言称为“基础数据类型”。这包括两个部分,一是与位宽相关的,例如 Byte,它是计算系统的直接映射;二是与应用环境相关的,例如 Char,它与该系统对外的表示有关7。它们事实上本身就是对数据的结构化表达,最明显的就是浮点数的组合型表示方式,又例如字符的顺序型表示方式。但总的来说,这些基础数据类型,总是能“挤”在一个最大位宽的表示单元中去。

7 例如一个图形计算环境,就可以考虑以 RGB 为基础数据类型并建立起基于此的运算体系。

换而言之,就是在连续空间中表示完整含义

然而就最初的需求来说,所谓完整含义是我们对数据而不仅仅是对于数的假设。例如,下面的数据是有完整含义的:

复制代码
Hello World!

但这个数据如何在连续空间中表达呢?从自然形式的理解来看,它是 12 个字符。因此即使以每 8 位表示一个字符而言,它需要 96 个位。对于“顺序地址存储”来说,在 32/64 位机器中,即使能通过一个地址来找到它,也无法一次将它全部取到 CPU 中去运算。但是,它本身又的确是连续而完整的,我们不能孤立地从其中的一个部分来理解它。由此产生了一个问题:我们——程序员以及计算环境——该如何理解超过“(有限大小的)区域”的数据呢?

答案是:有一个起始地址连续区域。

这里的起始地址与此前的“顺序地址存储”中的地址是同一概念,但“连续”性也必须体现为数值才能为计算系统所理解。因此对于这样的数据,我们需要两个数值来定义:地址、(连续的)长度。现在,由于有了“长度”的概念,因此我们通过“顺序地址存储”可能得到的数据就有了非常大的变化:

  • 其一,可以找到的最后的数据的位置索引不变,仍然是 2321
  • 其二,可以从该位置识别的最大可能值是一个 02321 长度的连续区域8

8 与此前讨论的地址索引问题类似,这个连续区域的实际大小也受限于可用的、能被编码的地址大小。

或许你现在已经想到了“指针”(pointer)?不,我们现在还没有讨论到它。我们仅仅在讨论一个连续的存储结构,例如数组、字符串或结构体。

评论

发布