【问题标题】:Size of pointers and if that size is dependent of the architecture指针的大小以及该大小是否取决于架构
【发布时间】:2022-01-04 19:38:15
【问题描述】:

好吧,对不起这个问题,更像是一种一般文化(尚未找到准确的答案)。

如果我有类似的东西

char * Field

void * Field

double pointers
  • 指针大小一样吗? (据我记得大学时它是 4 个字节,但是......)
  • 指针的大小是否因 CPU 的体系结构而异?
  • 如果我指向一个数据结构,指针本身的大小是一样的,不是吗?

假设 C 中的示例(我倾向于认为其他不直接处理指针的语言也是如此)

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    指针的大小是一样的吗? (据我记得大学时它是 4 个字节,但是......)

    不一定相同也不一定是4个字节:Are all data pointers the same size in one platform for all data types?

    指针的大小是否因 CPU 的架构而异?

    它因架构而异。即使在相同的硬件上,它也可能因操作系统而异(例如 32 位与 64 位)。

    如果我指向一个数据结构,指针本身的大小是一样的,不是吗?

    同样,不一定:Are all data pointers the same size in one platform for all data types?

    【讨论】:

    • 有趣又令人困惑。我会研究更多,特别是尺寸差异。谢谢。
    【解决方案2】:

    在大多数系统中,指针的大小是相同的,但 C 不保证这一点。它只是向您保证void* 足够宽,可以包含所有指针类型(指向函数的指针除外)。是的 - 这取决于 CPU。 (在 64 位系统中,指针通常为 8 个字节)

    【讨论】:

      【解决方案3】:

      32 位系统通常有 4 字节大小的指针和 64 位机器,通常有 8 字节大小的指针。 这里的关键词当然是——通常,你可能使用的设备完全有可能是基于哈佛架构(或其他一些总线架构方案)的,它对数据和代码区域有单独的内存。 因此,具有不同宽度的单独总线,因此变量指针(int*、double*、long int* 等)的大小可能是 8 位,但函数指针的大小是 16 位,在非常相同的架构。

      【讨论】:

      • 也不一定和哈佛架构有关。如果我们查看 8 位或 16 位 CPU(哈佛或冯诺依曼)的小型微控制器,他们可能希望使用超过 64kb 的数据和/或代码寻址,然后您需要一种特殊的 24 位或 32 位扩展指针。
      • 是的,我只是以哈佛架构为例,让 OP 了解其中的可能性。但是,我已经编辑了答案,使其听起来更清晰。感谢您的意见。
      【解决方案4】:

      1) 指针的大小对于所有指针类型都是相同的。

      2) 通常在 32 位架构上为 4 字节,在 64 位架构上为 8 字节。

      3) 无论你指向什么,指针的大小都是一样的。

      【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2019-10-06
      • 2013-02-26
      • 2022-06-10
      • 2011-08-26
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      相关资源
      最近更新 更多