gpt4 book ai didi

c - 指针占用多少字节?

转载 作者:太空狗 更新时间:2023-10-29 16:37:29 25 4
gpt4 key购买 nike

我对指针及其占用的字节数有点困惑。在我的教科书中,它首先说 16 位系统上的指针占用 2 个字节,32 位系统占用 4 个字节,64 位系统占用 8 个字节等等。然后在 10 行之后,它说指针占用了保存地址所需的那么多字节。这是我的问题:

  1. 那么这是否意味着如果我们假设在 64 位系统上,地址最多需要 8 个字节?
  2. 如果我们在 16 位系统上并且指针占用 2 个字节,而地址需要放置更多的 2 个字节,那么会发生什么?

最佳答案

没有固定的答案;它完全取决于体系结构、编译器实现,甚至指针本身的类型。不保证指向不同类型的指针具有相同的大小和/或表示形式。

例如,假设一个字寻址架构,其中最小的可寻址存储单元为 16 位宽(或更宽)。每个单词可以包含多个 char 值;所有其他类型占用一个完整的单词或更多。在这样的体系结构中,与其他指针类型相比,char *void * 将需要一些额外的位来偏移字。

另请注意,指针类型可能比存储地址实际所需的位数。最初的 Macintosh 运行在摩托罗拉 68000 CPU 上,它有 32 位字长,但在地址总线上只有 24 位。指针类型为 32 位宽,高 8 位未使用。有进取心的 MacOS 程序员利用这一点将一些数据存储到指针类型的最高字节,从而充分利用宝贵的 128 KB RAM。当然,摩托罗拉最终发布了具有 32 个地址线的 CPU(68020),这意味着所有代码都必须重写。

在现代商用台式机和服务器硬件(阅读:x86)上,可以合理安全地假设所有指针类型的大小都与 native 字大小(32 位或 64 位)相同,并且所有指针类型都具有相同的大小和表示。请注意,这不一定是真的。

关于c - 指针占用多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com