C 指针的大小:相关因素

C 指针的大小:相关因素,c,pointers,size,32bit-64bit,C,Pointers,Size,32bit 64bit,我发现很难理解C中指针变量的大小所依赖的因素。我查看了一些参考资料,到目前为止,我得到的唯一信息是指针大小取决于处理器架构 请详细解释架构如何影响指针大小 一般来说,如果指针是x位,那么0到2^(x)-1的地址位置数应该在那里。当关联地址位置数和程序可用的实际内存量时,我失去了跟踪 指针是一个变量,它保存另一个内存位置的地址 现在,如果您在32位体系结构上运行,那么保存内存引用的CPU寄存器(很可能还有所有其他寄存器)的长度将为32位;这基本上就是32位的意思(寄存器的字长为32位),因此指针

我发现很难理解
C
中指针变量的大小所依赖的因素。我查看了一些参考资料,到目前为止,我得到的唯一信息是
指针
大小取决于处理器架构

  • 请详细解释架构如何影响指针大小
  • 一般来说,如果指针是
    x位
    ,那么
    0到2^(x)-1的地址位置数应该在那里。当关联地址位置数和程序可用的实际内存量时,我失去了跟踪
    
      指针是一个变量,它保存另一个内存位置的地址

      现在,如果您在32位体系结构上运行,那么保存内存引用的CPU寄存器(很可能还有所有其他寄存器)的长度将为32位;这基本上就是32位的意思(寄存器的字长为32位),因此指针(内存位置)通常为32位(4字节)

      这同样适用于64位CPU,因此为64位CPU编译的C程序中的指针通常有8字节长(64位)

      编辑:
      还请注意,在大多数现代体系结构中,您并没有真正用代码处理物理内存;运行并寻址所谓的虚拟内存

      基本概念是,CPU/OS组合将使您的程序具有完整的地址空间

      同样,地址空间(您可以在内存中寻址的空间)长度将取决于CPU可以寻址位置的距离,而这(在一般情况下)将取决于它的字大小

      我发现很难理解C中指针变量的大小所依赖的因素。我检查了一些参考资料,到目前为止,我得到的唯一信息是指针大小取决于处理器体系结构。32位机器上为4字节,64位机器上为8字节。我想知道以下细节

      情况并非如此,无论如何,您必须了解指针的大小包含虚拟地址的地址(在支持它的操作系统上)。因此,指针的大小取决于内存总线的宽度。这就是架构影响指针大小的原因。
      请注意,这并非总是正确的:例如,所有指针的大小可能都不相同。

      指针大小取决于许多因素(硬件、操作系统、编译器等),并且并非同一平台上的所有指针类型都具有相同的大小。例如,存在使用哈佛体系结构的嵌入式处理器,其中代码和数据位于单独的内存区域中,并且每个处理器可能具有不同的总线大小(例如,数据为8位,代码为16位)。这意味着对象指针(
      int*
      char*
      double*
      )可能是8位宽,但函数指针(
      int(*)(
      )可能是16位宽

      另一个例子,考虑一个单词寻址体系结构,其中基本的内存单元不是8位字节,而是一个更大的单元(其中宽度可以是16, 18, 24、32, 36, 64或128位,或者其他一些值;2的幂已经被证明是方便的,但不是必需的)。其中一些架构可能会选择将多个

      char
      值打包到一个字中,这意味着
      char*
      需要一些额外的位来指定字中的偏移量


      在书中,Harbison&Steele用36位单词描述了一个架构。字符数据存储为7位ASCII值,这意味着每个字可以容纳5个字符,其中一位未使用;所有其他类型的单词都占满了

      32位机器上为4字节,64位机器上为8字节。这不是标准的保证,在现实生活中有时甚至是错误的。32位cpu=32位指针等根本不能保证。OS/400上一个占地面积小的32位arch cpu使用128位指针和单个全局128位虚拟地址空间。你的假设是错误的。如果您感兴趣,请参阅以了解更多信息。许多64位计算机可以同时运行32位和64位可执行文件。指针的大小不取决于内存总线的宽度。8086和8088中的指针大小相同,但8086的内存总线宽度为16位,8088的内存总线宽度为8位。规范是否规定了指针大小的相关内容?@Talespin_Kit:没有具体的大小。见第6.2.5/28节。简而言之,
      char*
      void*
      必须具有彼此相同的大小和表示形式,兼容类型的合格和不合格版本的指针必须具有相同的大小和表示形式,指向所有
      struct
      类型的指针必须具有相同的大小和表示形式(对于
      union
      类型相同)。除此之外,这取决于实施。但对最小尺寸或表示形式没有要求。