指针占用了多少字节?

 庚的右翼cs神 发布于 2023-02-08 12:17

我对指针和它们占用的字节有点困惑.在我的教科书中,它首先说明16位系统上的指针占用2个字节,32位系统占用4个字节,64位系统占用8个字节,依此类推.然后是10行,它表示指针占用了许多字节,这是保存地址所需的.这是我的问题:

    那么这是否意味着如果我们在64位系统上说,地址最多需要8个字节?

    如果我们在16位系统上,指针占用2个字节,并且地址需要更多2个字节,那么会发生什么?

NPE.. 10

简短的回答是它取决于.当我们说系统是32位时,这可能意味着本机整数是32位宽,本机地址(即指针大小)是32位宽,或两者兼而有之.

最重要的是,并非每个架构都使用平面内存模型(例如,请参阅x86内存分段).这进一步使问题复杂化.

最好将指针的大小视为不透明.

C99提供了形式intptr_tuintptr_t类型的工具,这些工具是保证宽度足以容纳指针的整数.

2 个回答
  • 简短的回答是它取决于.当我们说系统是32位时,这可能意味着本机整数是32位宽,本机地址(即指针大小)是32位宽,或两者兼而有之.

    最重要的是,并非每个架构都使用平面内存模型(例如,请参阅x86内存分段).这进一步使问题复杂化.

    最好将指针的大小视为不透明.

    C99提供了形式intptr_tuintptr_t类型的工具,这些工具是保证宽度足以容纳指针的整数.

    2023-02-08 12:19 回答
  • 没有固定的答案; 它完全取决于体系结构,编译器实现,甚至指针本身的类型.不保证指向不同类型的指针具有相同的大小和/或表示.

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

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

    在现代商品桌面和服务器硬件上(读取:x86),假设所有指针类型与本机字大小(32位或64位)相同,并且所有指针类型具有相同大小是相当安全的和代表.要知道,这不是真实的.

    2023-02-08 12:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有