指针的大小与什么有关?

  1. cpu位数(32位数4字节,64位数8字节)
  2. 操作系统位数(32位数4字节,64位数8字节)
  3. 编译器的位数(32位数4字节,64位数8字节)

当上述3种位数不同,取最小的位数。
比如,如果CPU、系统都是64位的,但编译器是32位的,那么很显然指针只能是32位4字节大小。

我们的内存中有各种各样的数据,整型、浮点型、字符型等等。这些数据在内存中占据不同大小的储存空间,故用sizeof运算符(注:sizeof是种运算符而不是函数,它在编译时发挥作用)进行运算时结果是不同的。然而不同类型的指针在相同系统环境下进行这种运算时结果却是相同的。为什么呢?

众所周知,C语言中的指针描述的是内存中的地址。而内存地址这种东西则是由CPU进行编址的。对于一个4位的CPU来讲,它能同时输出的数据为4位,即0000-1111共24 种情况,故这些二进制数字只能对应到16个位置的内存地址,即CPU仅能识别出16个内存地址。即便你的内存再大,它也显示只有16个位置的内存可用。这种原理同样应用于32位和64位的CPU。

32位的CPU能同时呈现32个位的数据,故有232 种情况,对应到232 个内存位置也就是最大3.85GB大小,因此32位的系统只能支持最大4GB的内存。相比之下,64位的CPU能同时吞吐 264 位的数据,这显然能够对应到264 个内存的地址,而理论上这个大小换算成10进制则是相当大的数,如果对应到内存,此时一个很大的内存。所以我们说64位系统理论支持无穷大内存(这里的无穷大只是一种概念,因为我们不可能用到如此巨大容量的内存)。

综上,因为指针存放的是地址,所以32位内存,共4个字节;64位系统的64位地址共8个字节——你应该明白什么了吧!没错,32位指针4字节,64位指针8字节。

当然,CPU只是影响指针大小的首要因素,除了它之外还要看操作系统和编译器的位数。这里指针的大小由这三个东西中位数最小的那项决定。比如,如果CPU、系统都是64位的,但编译器是32位的,那么很显然指针只能是32位4字节大小。

指针的大小与什么有关相关推荐

  1. android获取指针空间大小_腾讯笔试题:浅谈计算机中cpu位数和指针

    来一个腾讯笔试题 在刷题的时候看到了腾讯笔试题的这个问题 long a = (long)(((int *) 0) + 4);printf("%ld ",a); 请问输出 a 的值是 ...

  2. 为什么在64位系统中指针的大小是8,而32位系统中却是4?

    为什么在64位系统中指针的大小是8,而32位的却是4? 64位系统,这个位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,所以: sizeof(double * ...

  3. 指针--指针的创建和指针的大小

    文章目录 内存 内存的大小 指针定义 指针变量是多大 内存 讲到指针,我们肯定会提到内存 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 . 所以为了有效的使用内存,就把内存划分成 ...

  4. 指针的大小--sizeof问题和sizeof使用规则

    1.什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associat ...

  5. linux下c 指针变量大小,C语言sizeof关键字

    常年被人误认为函数. sizeof 是关键字不是函数,其实就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份.看下面的例子: int i=0: A),sizeof(int): B ...

  6. android获取指针空间大小_Android进阶:Binder那么弱怎么面大厂?

    Binder机制在Android中的地位举足轻重,是用于通信的机制,我们需要掌握的很多原理都和Binder有关.其中系统服务的获取过程也与Binder有关.获取系统服务前需要了解ServiceMana ...

  7. C语言zh字符串指针的大小,C语言的一些小技巧,小知识

    1.用if(!strcmp(s1, s2)) 比较两个字符串等值,是否是个好风格? 这并不是个很好的风格, 虽然这是个流行的习惯用法.如果两个字符串相等, 这个测试返回为真, 但! ("非& ...

  8. C语言-指针存储空间大小

    如果提到C语言指针大小,估计大家都会说是4个字节,但是是否真的如此呢? int* pa = NULL; printf("%d\n", sizeof(pa)); 在我的机器上的输出结 ...

  9. malloc动态分配数组以及指针数组大小

    对于二维数组:一般来说,当给两个数分别表示行列,但两个数的范围过大,就需要动态分配. int i,j,m,n;scanf("%d%d",&m,&n);int **a ...

最新文章

  1. 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】
  2. linux删除项目命令,项目2 Linux基本命令
  3. 惠普企业第三财季净利润23亿美元 同比增长914%
  4. javascript常用小例子
  5. SD question:客户主数据中“合伙人功能”视图里面的数据怎么样才能自动带出来?...
  6. 2021年热门临床研究盘点
  7. PHP之MVC项目实战(三)
  8. Oracle - 导入异常ORA-01659和11G在Exp时空表不能导出
  9. 离职一个月了,也面了很多公司,但都没有offer,软件测试工作怎么就这么难找?
  10. [机器学习]推荐系统介绍
  11. JDK自带的native2ascii工具完全揭密
  12. 探索FireMonkey的StyleBook皮肤控件的使用
  13. 浦发银行计算机基础知识题库,2018浦发银行面试经验(信息科技岗,总行信息技术岗等)...
  14. 【刘一哥2021总结】不负韶华,收获丰硕;不忘使命,砥砺前行
  15. 计算机专业毕业设计题目哪个简单,计算机专业毕业设计题目计算机专业毕业设计的类型...
  16. HTML指南针源码zip,ios 制作的指南针
  17. 导致项目进度延误的三种常见场景及解决方案
  18. JavaScript:base64编码与解码
  19. Nginx 403 Forbidden
  20. 训练数据,验证数据和测试数据

热门文章

  1. qt 控件设置相对位置_qt设置控件相对位置
  2. ##用R分析白葡萄酒(数据来源:http://archive.ics.uci.edu/ml/datasets/Wine+Quality)
  3. 时间最优轨迹规划(3-5-3次多项式)
  4. ffmpeg超时设置
  5. 如何让浏览器直接下载后端返回的图片而不是打开
  6. win10之定时关机
  7. matlab zf预编码,多用户MIMO系统中各种波束成型预编码性能比较(ZF,BD,MMSE,SLNR,MF,SVD)...
  8. 一些投资理财渠道(仅供参考)
  9. 利用GPS定位[android]
  10. 小马智行与速腾聚创展开全面战略合作