【发布时间】:2017-10-12 09:20:46
【问题描述】:
如果我们有 32bit 或 64bit 计算机架构,是否意味着我们可以处理 2^32 或 2^ 64 字节大小的内存位置?
我们是否总是将寻址与最小的内存单元字节联系起来?
【问题讨论】:
标签: memory cpu cpu-architecture memory-address
如果我们有 32bit 或 64bit 计算机架构,是否意味着我们可以处理 2^32 或 2^ 64 字节大小的内存位置?
我们是否总是将寻址与最小的内存单元字节联系起来?
【问题讨论】:
标签: memory cpu cpu-architecture memory-address
没有,也没有。 (但在“普通”CPU 上,是的。)
x86-64 是具有 64 位整数寄存器的 64 位架构,但它only has 48-bit virtual address space(如果需要,将来可以扩展到 64)。指针是 64 位整数,但前 16 位必须是低 48 位的符号扩展。最初的实现 (AMD K8) 仅支持 40 位物理地址。 page-table format allows up to 52-bit physical addresses, but current implementations only support 48-bit (256TiB of RAM)。
32 位 x86 具有分段和分页功能,因此它可以从 cs、ss、ds、es、fs 和 gs 中分别寻址 4GiB。 (这超级不方便,所以所有主流操作系统都只使用平坦的 4GiB 内存空间)。
大多数 8 位 CPU 可以使用一对 8 位寄存器作为 16 位指针。 AVR(具有 32 个 8 位寄存器的 8 位 RISC 微控制器)仍然可以。
术语 32 位或 64 位架构非常模糊。这是否意味着寄存器大小,数据总线宽度,指针宽度?人们(有时包括营销部门)可以随心所欲地称呼事物。 Skylake-avx512 在执行单元和 L1D 缓存(用于向量加载/存储)之间具有 512 位路径。那么它是 512 位 SIMD 架构吗?是的,我想是的。它也是一个 64 位架构。 AMD Ryzen 将 256b AVX 指令分成两半 128b。它是 256 位 SIMD 架构吗?当然,为什么不呢。 在架构上,寄存器是 256b 宽。它也是 128b SIMD 架构吗?是的。
大多数现代架构都是字节可寻址,但有些(可能像 DSP?)只能字寻址。每个地址都可以是一个完整的机器字(例如,某些奇怪的 CPU 上的 36 位)。在这种情况下,32 位地址将为您提供 4GiB * bytes-per-word 的地址空间,但您必须加载 + shift&mask 才能将其用作许多单独的字节。
【讨论】: