指针存储一个内存地址,因此它的大小是一个内存地址的大小,它不依赖于任何内存位置。另一方面,字长是指令可以工作的最大单位,因此,内存位置的大小无关紧要,因为一次可以收集多个。那么字大小和指针大小之间是什么关系?
指针存储一个内存地址,因此它的大小是一个内存地址的大小,它不依赖于任何内存位置。另一方面,字长是指令可以工作的最大单位,因此,内存位置的大小无关紧要,因为一次可以收集多个。那么字大小和指针大小之间是什么关系?
Answers:
它们不必相同,并且它们所在的计算机系统的数量不会大大超过它们所在的计算机系统的数量。指针大小和“字”大小之间仍然存在一些关系。
程序执行很多指针运算。数组下标是指针加法。指针相互比较。如果您的CPU无法对指针大小的内容进行算术运算,则必须将您的地址分为多个变量,这将导致分段或存储的地址空间。它们管理起来很复杂,并且会导致类似指针的类型(近指针,远指针,基于指针的类型)泛滥。结果,您将获得其他怪异的限制,例如链表可以容纳比数组更多的项。
但是,具有8位数据总线和较大地址空间(也许仅用于代码而不用于数据)的微控制器仍然很常见。在另一方面,具有32位或64位指针的现代通用CPU的数据字要比指针宽得多(例如,现代x86_64 CPU的AVX子系统中的512位数据字)。许多无锁算法都依赖于对数据的原子访问,该访问至少是指针大小的两倍。
TLDR:可能是巧合。
指针本身并不是计算机体系结构的一部分,它是一种编程语言功能。例如,Windows API定义了自己的指针类型以及指针的大小。在Windows上的C中,char*
根据您的版本,指向char()的指针在32位和64位之间变化。一个单词的大小可能与它无关。
单词是一个非常重载的单词,哎呀,术语。在CPU体系结构中,一个字可以指代指令,数据总线,内存总线等的大小。在Windows API中,一个字是无符号的短整数,即至少 2个字节,因此取决于实现短整数的方式。
MS词和指令大小的词之间可能存在关联,但是我认为您需要OS开发人员对此进行辩论,并且我怀疑这会影响指针的大小。
一次,计算机寄存器和内部总线已从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获得更完整的解释。