memory - 32 位和 64 位架构上的寻址

标签 memory cpu cpu-architecture memory-address

如果我们有32位64位计算机架构,这是否意味着我们可以寻址2^322^ 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/

相关文章:

c - 内存只读的机制是什么?

operating-system - 内核是一个始终执行的特殊程序吗?为什么使用这些CPU模式?

assembly - x86架构中的 "EU"是什么? (计算有效地址?)

android - 如何指示一个 Android 应用程序只支持 ARM CPU?

java - 查找内存泄漏可能性

c - 从内存中读取 "zero"是否比读取其他值更快?

multithreading - 如何在一个处理器内核上执行多个线程

x86 - Haswell 内核可以同时执行多少个 32 位整数运算?

有人可以用更简单的方式解释一下吗?

php - 将数据库保存在内存中,即使客户端脚本断开连接