C++ 杂记

001 内置类型的机器实现

2019-12-30  本文已影响0人  赵者也

计算机以比特(bit)序列存储数据,每个比特非 0 即 1,例如:

00011011011100010110010000111011 ...

大多数计算机以 2 的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节(byte)”,存储的基本单元称为“字(wold)”,它通常由几个字节组成。在 C++ 语言中,一个字节要至少能容纳机器基本字符集中的字符。大多数机器的字节由 8 比特构成,字则由 32 或 64 比特构成,也就是 4 或 8 字节。

大多数计算机将内存中的每个字节与一个数字(被称为“地址(address)”)关联起来,在一个字节为 8 比特、字为 32 比特的机器上,我们可能看到一个字的内存区域如下所示

736424 0 0 1 1 1 0 1 1
736425 0 0 0 1 1 0 1 1
736426 0 1 1 1 0 0 0 1
736427 0 1 1 0 0 1 0 0

其中,左侧是字节的地址,右侧是字节中 8 比特的具体内容。

我们能够使用某个地址来表示从这个地址开始的大小不同的比特串,例如,我们可能会说地址 736424 的那个字或者地址 736427 的那个字节。为了赋予内存中某个地址明确的含义,必须首先知道存储在该地址的数据的类型。类型决定了数据所占的比特数以及该如何解释这些比特的内容。

如果位置 736424 处的对象类型是 float,并且该机器中 float 以 32 比特存储,那么我们就能知道这个对象的内容占满了整个字。这个 float 数的实际值依赖于该机器是如何存储浮点数的。或者如果位置7 36424 处的对象类型是 unsigned char,并且该机器使用 ISO-Latin-1 字符集,则该位置处的字节表示一个分号。

上一篇下一篇

猜你喜欢

热点阅读