地址空间、可寻址性、可字寻址、寻址模式之间有什么区别?

Eur*_*eka 0 assembly instruction-set cpu-architecture memory-address

据我所知:

  • 地址空间:分配给程序或进程的可用内存量
  • 可寻址性:计算机识别不同内存位置的方式。
  • 字寻址:指大小等于“字”的内存单元,通常是一个字节,由单个二进制地址指向
  • 寻址方式:指指令操作数的指定方式

我不确定我是否正确,因为这些术语非常相似,有时我很难提及正确的事情。

Eri*_*idt 5

\n

地址空间:分配给程序或进程的可用内存量

\n
\n

是的,大多数情况下:因此,在进程中的程序上下文中,地址空间指向可以使用的可能地址,而不是实际使用的地址。\xc2\xa0 这包括不可用的位置和可用的位置.\xc2\xa0 地址空间通常通过其位宽大小来描述,例如 32 位或 64 位。

\n

关于地址空间的关键点是每个进程都有自己的地址空间,因此每个进程都可以使用相同的地址。\xc2\xa0 一个进程无法想象出可以访问另一个进程的内存(地址空间)的地址进程(有意共享内存的模)。

\n

在硬件环境中,地址空间大小是用于地址总线的位数,地址总线在处理器和主内存之间传递地址。\xc2\xa0 例如,此位数可以大于地址空间,在现代 32 位机器上,它可能具有 33 位地址空间,这意味着实际内存比单个进程可以寻址的内存要多。\xc2\xa0 在 64 位机器上,位数用于寻址主内存的位可能高达 48(我的有 35 位,最大 32 GB)。

\n

软件通常不知道硬件地址总线的大小,因此以及其他一些原因意味着程序将使用完整的 32 位字来表示 32 位进程上的地址,使用完整的 64 位字来表示 64 位进程上的地址。位进程。

\n
\n

可寻址性:计算机识别不同内存位置的方式。

\n
\n

是的。\xc2\xa0 内存的一个基本属性或质量是它具有可寻址性,即我们可以获取某个存储的地址(地址是数字)并将该地址用作第一类实体,这意味着例如,我们可以将地址作为参数传递给函数,并且该函数可以使用该地址来访问它所引用的内存。\xc2\xa0 通过这种方式,我们可以将任意大小的数据结构传递给函数。\xc2 \xa0 此外,一个实体还可以通过其地址引用另一实体,用于表示丰富的数据结构。

\n

让我们将其与 CPU 寄存器进行对比,CPU 寄存器可以在机器代码指令中命名,但它们没有地址,无法获取地址,无法索引:它们不具有寻址能力(大多数 CPU)。

\n
\n

字寻址:指大小等于“字”的内存单元,通常是一个字节,由单个二进制地址指向

\n
\n

在这种情况下,X 可寻址是指我们通过使用单个内存地址 . a\xc2\xa0 获得多少位存储。这涉及到这样一个概念:如果我们还存储在a+1a-1那些代表不同存储位置的位置,每个位置的宽度为X

\n

在将字定义为 8 位字节时,很少使用术语“字可寻址”。\xc2\xa0 通常,术语“字可寻址”与术语“字节可寻址”相对照使用。\xc2\xa0 现代计算机是字节寻址的可寻址,这意味着每个地址保存一个字节,8 位。\xc2\xa0 多字节项(如 32 位字)占用存储的多个字节 (4),这也意味着它们占用多个(字节)地址。\xc2\ xa0 我们通过一个多字节项的最低地址来引用它。

\n

一些计算机,尤其是教育计算机,如 LC-3、MARIE 和 Hack 是可字寻址的,其中字宽为 16 位;这简化了索引操作。\xc2\xa0 对它们来说可字寻址意味着每个地址(例如aa+1)存储 16 位。\xc2\xa0 早期的计算机,例如 1950' 和 60 年代也使用字寻址,字大小可以在任何地方从 12 位到 36 位相当常见。

\n
\n

寻址方式:指指令操作数的指定方式

\n
\n

是的,它通常指内存操作数,但在某些处理器上,当操作数可以位于内存或寄存器中时,它指任何操作数。\xc2\xa0 最基本的寻址模式可能是寄存器间接寻址。

\n

由于寻址内存是数据结构的基础,因此某些处理器提供了多种计算地址的方法,而无需单独的指令来进行这些寻址计算。\xc2\xa0 这非常方便。\xc2\xa0 在复杂寻址模式中,处理器计算地址(例如使用加法和可能的缩放),使用该有效地址,然后丢弃该地址。

\n

如果我们想重复访问完全相同的内存位置,我们可能会执行与复杂寻址模式相同的计算,但捕获计算出的地址,以便我们稍后可以直接使用它,而无需重复复杂的地址计算。

\n