【发布时间】:2021-10-17 11:40:40
【问题描述】:
鉴于我们的 RAM 单元有 6 个地址位和 32 位架构,存储一个整数值需要多少字节?答案说 4 个字节,但我不明白为什么会这样。
有人可以帮我理解他们是如何得到 4 的吗?
【问题讨论】:
-
在 32 位架构上,您通常会选择
int的宽度为 32 位,与寄存器的宽度相同,即 4 字节,不管总字节数是多少有RAM(因此您有多少地址位)。你不能“计算”这个,这是一个任意的选择。您还可以使用 1 字节整数值,例如 Cint8_t,用于为不需要大值范围的事物节省空间。 -
本质上这是一个非常糟糕的问题。 “32 位架构”不是一个精确的术语。 如果您假设 32 位是数据路径/寄存器宽度并且假设整数由该宽度表示,并且还假设 byte 有 8 位,然后你得到 32/8=4 字节。例如。许多 8086 时代的系统实现了 32 位和 64 位整数,即使它们是 16 位架构。更不用说 8 位(正如 Peter 提到的)和 BCD 整数。
-
当然,在 64 位 ISA 上,大多数 C 实现仍然选择 32 位
int,因为它已经足够宽了,而带有 32 位int的 C 已经广泛使用了足够长的时间存在这么多代码,可以更好地使用它(或仅使用它)。因此,任何语言的默认整数数据类型都必须与寄存器具有相同的宽度,这不是一个规则。例如,在 x86-64 机器代码中,默认操作数大小为 32 位。因此,除非您获得有关该整数的隐含寄存器宽度有多宽的更多信息,否则这是一个非常糟糕的分配问题。
标签: assembly memory cpu-architecture ram