如果我们有32位或64位计算机架构,这是否意味着我们可以寻址2^32或2^ 64 字节大小的内存位置?
我们是否总是将寻址与最小内存单元字节联系起来?
最佳答案
不,不。 (但在“普通”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 微 Controller )仍然可以做到这一点。
术语 32 位或 64 位架构非常模糊。是指寄存器大小、数据总线宽度、指针宽度吗?人们(有时包括营销部门)可以随意称呼事物。 Skylake-avx512 在执行单元和 L1D 缓存(用于向量加载/存储)之间具有 512 位路径。那么它是512位SIMD架构吗?是的,我想是的。它也是 64 位架构。 AMD Ryzen 将 256b AVX 指令分成两半 128b。是256位SIMD架构吗?当然,为什么不呢。 从架构上来说,寄存器的宽度为 256b。也是128b SIMD架构吗?是的。
大多数现代架构都是字节寻址,但有些(比如DSP?)只是字寻址。每个地址可以是一个完整的机器字(例如,一些奇怪的 CPU 上的 36 位)。在这种情况下,32 位地址将为您提供 4GiB * 每个字字节的地址空间,但您必须加载 + shift&mask 才能将其用作那么多单独的字节。
关于memory - 32 位和 64 位架构上的寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705873/