字长通常如何与指针长相同?


-1

指针存储一个内存地址,因此它的大小是一个内存地址的大小,它不依赖于任何内存位置。另一方面,字长是指令可以工作的最大单位,因此,内存位置的大小无关紧要,因为一次可以收集多个。那么字大小和指针大小之间是什么关系?


“字大小是最大单位”-这是错误的。指针可以是32位或64位,具体取决于地址大小。根据一条指令,一条指令可以接受不同的字节大小,因此存在32位和64位指令的原因。为了便于
撰写,


@radhika谁告诉您“字大小是最大单位”?Long或longlong怎么样?如果您查看此表,您会感到惊讶,字长是从字长来看最不可靠的数据。它取决于运行的CPU体系结构
Alex

“但是同一台计算机可能能够处理字节,16位字和32位长字。” -这个说法是正确的,另一个不是100%,并且由工程师负责。您链接到的整个答案不是很准确,如果我可以发表不赞成票,那是因为我看到大量陈述完全是不准确的。ARM和x86基本上是计算机体系结构领域,并且都取决于特定的处理器,它们支持可变的字长。
Ramhound

Answers:


2

它们不必相同,并且它们所在的计算机系统的数量不会大大超过它们所在的计算机系统的数量。指针大小和“字”大小之间仍然存在一些关系。

程序执行很多指针运算。数组下标是指针加法。指针相互比较。如果您的CPU无法对指针大小的内容进行算术运算,则必须将您的地址分为多个变量,这将导致分段或存储的地址空间。它们管理起来很复杂,并且会导致类似指针的类型(近指针,远指针,基于指针的类型)泛滥。结果,您将获得其他怪异的限制,例如链表可以容纳比数组更多的项。

但是,具有8位数据总线和较大地址空间(也许仅用于代码而不用于数据)的微控制器仍然很常见。在另一方面,具有32位或64位指针的现代通用CPU的数据字要比指针宽得多(例如,现代x86_64 CPU的AVX子系统中的512位数据字)。许多无锁算法都依赖于对数据的原子访问,该访问至少是指针大小的两倍。


字长是处理器可以同时执行的最大位数,因此这意味着ALU大小和字长相同,因此,字长是体系结构定义的,如果我错了,请纠正我。
radhika

另外,如果我谈论内存数据寄存器的大小和数据总线的大小,它们是相同还是不同?
radhika

1

TLDR:可能是巧合。

指针本身并不是计算机体系结构的一部分,它是一种编程语言功能。例如,Windows API定义了自己的指针类型以及指针的大小。在Windows上的C中,char*根据您的版本,指向char()的指针在32位和64位之间变化。一个单词的大小可能与它无关。

单词是一个非常重载的单词,哎呀,术语。在CPU体系结构中,一个字可以指代指令,数据总线,内存总线等的大小。在Windows API中,一个字是无符号的短整数,即至少 2个字节,因此取决于实现短整数的方式。

MS词和指令大小的词之间可能存在关联,但是我认为您需要OS开发人员对此进行辩论,并且我怀疑这会影响指针的大小。


0

一次,计算机寄存器和内部总线已从4位变为8位,然后是16位,32位,现在是64位。最大地址空间取决于指针的大小(尽管某些早期的CPU,例如Z80A,可能会以指针大小的块形式分页内存)。

随着总线的变宽,还需要增加RAM,因此指针的大小也随之增加。但是,有时OS不能跟上较大的总线,例如,从Windows 7 32位过渡到64位时,最大可寻址RAM首先从4 GB移到8 GB,最后在192 GB移到高端版本。

因此,寄存器和总线的大小(在MS 16位操作系统中,从半字节到字节,然后是字,然后是DWORD,usw)随地址空间的增加而任意增加。可从@DarkDust获得更完整的解释。


Windows 32位版本的每个进程可以处理4GB以上的内存,但是当时还没有任何商业硬件或软件可以证明这样做的工程成本合理。具有虚拟零开发成本的Linux能够使用其几乎无限的人工时间进行开发。无论如何,CPU体系结构中的内存注册表大小与物理系统内存有什么关系?
Ramhound

事实并非如此:增加指针大小以允许寻址更多RAM只是简单的决定。
DrMoishe Pippik '17年

您正确指出,需要更大的变量类型,因为处理器涉及该功能。没有说明,它们将不存在,因为将无法操纵它们(加,减)。同样,指针大小与RAM,虚拟内存和页面文件无关,解决了许多问题,但是2GB和128GB的寻址与引入的指令无关。不过,您的答案
很有

问题是关于用于寻址内存空间的指针的大小,以及为什么它随着寄存器宽度的增加而增加。同样,允许更大的程序和数据集而不进行分页是一个任意决定。
DrMoishe Pippik '17年

1
指针是控制的地址空间的大小,通常是固定的任何OS的决定因素。(内部)总线宽度和寄存器大小由CPU固定,并控制在CPU周期中处理“块”数据的大小。变量的大小是任意的,并且在程序中,某些变量可能是单个字节(布尔值,尽管理论上为1位,但实际上为了简化寻址而实际上消耗了一个完整的字节。如何挥霍!),DWORD或多字节(例如在浮点运算中,点号)。
DrMoishe Pippik '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.