• 我们在编程过程中经常会用到指针变量,如果需要知道指针变量的大小,我们也可以很方便的使用sizeof来查看,但是指针变量的大小究竟和什么直接相关呢?

  • 首先,我们需要知道:指针变量其本质是指向一个地址的变量。我们可以将一段程序分为代码部分数据部分

  • 代码部分的地址其实就是指令的地址,在底层中根据使用的CPU架构不同,可以是PC寄存器或者CS:IP形式的寄存器组合。对于使用高级语言的程序员(非汇编程序员)来说,这些寄存器都是透明的,我们无法直接操作指令地址实现任意跳转,只能通过函数调用(函数指针也是一种变量)的形式实现指令的跳转。

  • 数据部分的地址其实就是变量的地址,这里需要区分变量大小和变量地址大小两个概念。变量大小根据程序员需要可以分配不同的字节数,比如char(1个字节),int(4个字节)等,而变量的地址大小分配,需要能够保证在变量可分配地址范围内的任何地方都能找到指向的变量。

  • 而这个可分配的地址范围就是存储器范围大小。但要区分理论可寻址范围和实际可寻址范围,RAM的大小决定了变量的实际可寻址范围,为了良好的扩展性,理论可寻址范围(逻辑地址)决定了指针变量的大小。比如:在小型16位MCU中指针变量大小是2B(无虚拟存储系统),其存储大小是8~16k。在最新的64位架构的8G内存的CPU中(有虚拟存储系统),逻辑可寻址范围达2^64,指针变量大小可达8B,虽然实际内存只有8G。

  • 总结:指针变量的大小由CPU当前运行模式(CPU不同运行模式的寻址架构不同)的逻辑寻址范围决定,即指令中的地址码位数。

指针变量的所占字节数大小确定相关推荐

  1. 用sizeof函数对变量数据所占字节数进行测量

    /*文件名:test.c *完成日期:2016.3.28 * *目的:使用sizeof函数对各种类型的变量所占的字节数进行测量 */ #include <stdio.h> #include ...

  2. int类型以及指针的类型所占字节的大小,到底是由什么决定的?

    int类型的大小仅仅是由 机器 的字长决定的,还是与机器的字长以及编译器都有关?     sizeof(int)=??         指针的类型是由什么决定的呢?     sizeof(Type   ...

  3. C语言各变量类型占字节数

    C语言变量所占字节数整理: 变量的基本类型包括:字符型.整型.长整型.浮点型. 每个变量在每个编译器所占的字节数不同,<the C Programming language>是这样说的: ...

  4. 常见基本数据类型所占字节数

    指针大小与系统编译器位数相同,16位编译器(2字节).32位编译器(4字节).64位编译器(8字节) 编码与中文: Unicode/GBK: 中文2字节 UTF-8: 中文通常3字节,在拓展B区之后的 ...

  5. c语言字符数组所占字节数,字符串所占字节数分析

    string与strlen 字符串赋值的时候会不会在末尾自动添加'\0'? char *s="\ta\017bc"中指针变量s 指向的字符串所占字节数是6的原因. '\t' 是一个 ...

  6. c语言类型名占字节,在C语言中,不同类型数据所占字节数

    <在C语言中,不同类型数据所占字节数>由会员分享,可在线阅读,更多相关<在C语言中,不同类型数据所占字节数(2页珍藏版)>请在人人文库网上搜索. 1.在C语言中,double. ...

  7. C/C++基本数据类型所占字节数

    关于这个主要的问题,非常早曾经就非常清楚了,C标准中并没有详细给出规定那个基本类型应该是多少字节数,并且这个也与机器.OS.编译器有关,比方相同是在32bits的操作系统系,VC++的编译器下int类 ...

  8. 17.3.10--关于C元的变量类型所占字节问题和类型转化

    在C语言并没有对于严格规定short,int  long所占字节,只是做了宽泛要求: short:至少连个字节 int建议为一个机器字长,32位环境下机器字长是4个字节,64位环境机器字长是8个字节 ...

  9. C语言32位系统下基本类型数据所占字节数

    char :1个字节  short int : 2个字节  int: 4个字节  unsigned int : 4个字节  float: 4个字节  double: 8个字节  long: 4个字节  ...

最新文章

  1. jquery后学什么_我在训练营两年后学到了什么
  2. 一流科技CEO袁进辉:人工智能产业化困局和机遇
  3. C++中类的继承方式的区别以及private public protected 范围
  4. ACM入门之【离散化】
  5. 弱口令的分析和爆破工具使用
  6. Karma和Jasmine自动化单元测试
  7. SAP APF框架错误消息Filter is too complex的处理
  8. Linux系统管理员的Bash指南,11条Bash实践经验!
  9. 计算机组成与系统结构第二版第5章,计算机组成与系统结构第五章答案.pdf
  10. Java逆向工程SpringBoot + Mybatis Generator + MySQL
  11. [渝粤教育] 西南科技大学 土木工程施工 在线考试复习资料(2)
  12. GO随笔-Web简读
  13. Android app接入微信人脸支付详解
  14. Android项目修改项目名称
  15. python微信群发itchat
  16. 一别西湖,又是江南烟雨
  17. gpasswd命令简介
  18. python整型图_[宜配屋]听图阁
  19. HDOJ 2604 Queuing (递推+矩阵快速幂)
  20. HDU 1009 FatMouse' Trade(简单贪心 物品可分割的背包问题)

热门文章

  1. GPUimage 遇到的崩溃及问题
  2. SpringBoot之lombok引入后@Data无法生成getset方法
  3. 深度学习自学(三十七):基于用户自定义要求3D房间自动设计研究
  4. 腾讯云主机安全防护(云镜)/usr/local/qcloud/YunJing/YDEyes/YDService 卸载
  5. 教你如何申请免费的API接口
  6. 计算机网络实验【静态路由】
  7. 电脑向linux板卡传文件,ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
  8. android map 多线程,Android多线程(一)
  9. mysql5.7误删管理员root账户ERROR1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
  10. js正侧表达式 三目运算的保留4位小数的运算