信息如何存储?

信息如何存储?

在过去,8 位信息和 8 位计算机相处得很好

ASCII 有 8 位,因此一个字节就是一个字符,并且代表内存/磁盘中的一个完整位置

然后出现了 16 位、32 位和 64 位计算机,但我迷失了方向

字符是如何存储的?是否使用 16/32/64 位 ASCII?

如果我有 8 位宽度的数据怎么办?我可以在一个位置存储许多字符吗?

例如对于 32 位,如果仅使用 8 位,那么还有 24 位未使用?

内存/磁盘位置-> 0000000 00000000 0000000 xxxxxxx

或者 16/32/64 内存/磁盘方向仍然指向 8 位而不是 16/32/64 位字?

那么 8 位仍然有效吗?似乎是

编辑

忘记 ASCII,我想知道单个地址(在内存/磁盘内)是否指向 8/16/32/64 位平台中的单个 8 位字节

答案1

如果超过 8 位,则字符根据定义就不是 ASCII。数字仍然是数字。

字节仍然是字节。具有更宽数据路径的计算机会同时抓取更多字节。32 位系统每次原生操作 4 个字节,而 64 位计算机每次操作 8 个字节。

磁盘如何管理数据是一个单独的问题 - 它将在内部完成自己的事情并使用适当大小的数据块响应接口(SATA 等)。

答案2

地址空间的大小以字节为单位。例如,您购买了一台具有 4GB RAM 或 3TB 磁盘的计算机。因此地址也指向单个字节。

当寻址超过 8 位时,您还会引用后面的字节。假设您有一个指向地址 104 的指针。如果您加载到 64 位寄存器,您将获得字节 104 到 111。如果您存储,您将覆盖这些地址。

你的基本问题是字符数据是如何存储在内存中的,包括 RAM 和磁盘上?通常,工作内存中的数据占用更多空间,但更易于处理;而在磁盘上,数据更紧凑,具有某种字符编码。但它们之间存在很大差异,各有利弊。

例如,字符在内存中总是占用两个字节,但在磁盘上存储时则占用一到四个字节,这种情况很常见。例如“ABC”在内存中为:65 00 66 00 67 00;在磁盘上为:65 66 67。对于称为字节顺序标记的特殊字符,在内存中为:255 254;在磁盘上为:239 187 191。这些是 Unicode 字符,以 UTF-8 编码存储在磁盘上。

(从技术上讲,ASCII 是 7 位;它仅定义 128 个字符。Unicode 是 ASCII 的 16 位超集。)

答案3

当今的 RAM 与 20 世纪 70 年代的 RAM 非常相似,每次仍可按 8 位寻址。因此每个内存地址指向一个 8 位字节。

当 16 位 CPU 开发出来时,它们保留了一次寻址 8 位的能力,以提高速度和兼容性。CPU 的各种组件都可以具有“位数”,寄存器宽度就是其中之一。但几乎所有 16 位或更高版本的 CPU 都有用于访问寄存器高 8 位或低 8 位的指令。因此,仅仅因为 CPU 有这么多位并不意味着它必须以这种大小的块访问内存或寄存器。

因此,回答你的问题:

16/32/64 内存/磁盘方向是否仍然指向 8 位而不是 16/32/64 位字?是的。32 位 CPU 从给定的内存位置将 32 位加载到寄存器中,将从 DRAM 中获取 4 个字节并将其放入寄存器中。

8 位仍然有效吗?是的。摩托罗拉 68000 CPU 虽然是 16 位芯片(有些人认为是 32 位),但有一条称为 ADDQ(代表 ADD QUICK)的指令,该指令会从寄存器或内存中获取操作数并将其添加到实际编码在指令本身中的 8 位值。我对 x86 汇编不太了解,但我确信有类似的指令限制为 8 位以提高速度。

答案4

64 位 CPU 能够寻址 8 位数据。

单个char存储在单个字节上。

相关内容