C++的一个指针占内存几个字节?

C++的一个指针占内存几个字节?

结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系)

  • 在64位编译模式下,指针的占用内存大小是8字节
  • 在32位编译模式下,指针占用内存大小是4字节

实验:(实验环境 vs2019)

  • 64位编译模式下
    在这里插入图片描述

    64位编译模式下,sizeof返回的是unsigned long long类型,占8字节

  • 32位编译模式下
    在这里插入图片描述

    32位编译模式下,sizeof返回的是unsgined int类型,占4字节

分析:
细心的同学可能会发现,为何 int* 和 stu* 类型的指针的大小一样呢?

  • 因为指针的本身的值就是内存地址,它的占用字节数也就是该程序能够访问内存地址的空间大小,比如32位编译模式下,最大寻址为32位,2^32 B=4 GB,指针的值就是在 0x00000000 - 0xFFFFFFFF 范围内的值。因此指针本身占用的内存数和它指向的数据类型没有任何关系。
  • 同理,64位编译模式下,理想的寻址位64位,也就是 2^64 B,这是个很大的值,而物理内存达不到这么大,CPU要实现64位的寻址能力只会增加系统复杂度和地址转换成本,因此Windows和Linux都做了限制,仅仅使用虚拟地址的48位,2^48 B=256TB。但是指针的占用内存字节数还是8 (只是Windows和Linux下,低48位有效而已).

额外讨论1:
那么,CPU寻址能力到底和什么有关呢?
答案是和地址总线的数量有关。

  • 16位CPU
    早期的CPU是16位的,一次能处理 16Bit(2个字节)的数据。这个时候计算机产业还处在早期,个人电脑也没有进入千家万户,也没有提出虚拟地址的概念,程序还是直接运行在物理内存上。典型的16位处理器是 Intel 8086,它的数据总线有16根,地址总线有20根,寻址能力为 2^20 B = 1MB
  • 32位CPU
    随着计算机产业的进步,出现了32位的CPU,一次能处理 32Bit(4个字节)的数据。这个时候就提出了虚拟地址的概念,并被应用到CPU和操作系统中,由它们共同完成虚拟地址和物理地址的映射。典型的32位处理器是 Intel 的 80386 和 Intel Pentium 4(奔腾4):80386 的数据总线和地址总线宽度都是32位,寻址能力达4GB;Pentium 4的地址总线宽度是36位,理论寻址能力达64GB。
  • 64位CPU
    现在64位的CPU也普及到千家万户,它们一次能处理64Bit(8个字节)的数据。典型的64位处理器是 Intel 的 Core i3、i5、i7 等,它们的地址总线宽度为 40~50 位左右。

值得注意的是,支持多大的寻址空间和CPU的位数没有直接关系,CPU的位数是指寄存器的位数,也可以说是数据总线的数量,衡量的是单次处理数据的能力。一般来说,地址总线会随着数据总线增多,也随之增多,用以支持更大的寻址空间。

额外讨论2:
short, int, long, long long在32位编译模式下和64编译模式下,占多少字节?
结论: 一样的!

shortintlonglong long__int64
32位24488
64位24488

实验:

  • 64位
    在这里插入图片描述
  • 32位
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmc线程转储_使线程转储智能化

jmc线程转储很久以前,我了解了一个称为Log MDC的东西,我对此非常感兴趣。 我突然意识到日志文件中发生的一切,并指出了特定的日志条目,并找到了对错,特别是在调试生产中的错误时。 2013年,我受委托从事一个…

【C语言】指针进阶第五站:函数指针!

点击蓝字关注我们函数指针函数也有自己的地址,函数名/&函数名 就是函数的地址1.1基本形式在 数组指针的学习中我们了解到int arr[5]; int (*pa)[5] &arr;//pa是数组指针指针变量pa的类型是int(*)[5]那么函数指针的形式是怎样的呢?void test(cha…

jsp 体检信息查询 绕过用户名验证_一篇彻底搞懂jsp

jsp 实栗 jsp jdbc 实现登录实现思路一个表单页,输入用户登录和密码,然后信息提交到jsp页面进行验证,如果可以服务器跳转到登录成功页,失败,跳转到错误页跳转的时候窗口的URL地址会发生变化代码如下编写登录代码登录&…

Python3求解找到小镇的法官问题

Python3求解找到小镇的法官问题原题 https://leetcode-cn.com/problems/find-the-town-judge/题目: 在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么&#xff…

couchbase_具有Rx-Java的Couchbase Java SDK

couchbase关于Couchbase Java SDK的一件整洁的事情是,它建立在出色的Rx-Java库的基础上,这为与Couchbase服务器实例进行交互提供了一种React性的方式,一旦掌握了它,它就非常直观。 考虑一个我打算存储在Couchbase中的非常简单的j…

C/C++与汇编混合编程有什么好处?

点击蓝字关注我们1 导语 当需要C/C与汇编混合编程时,可以有以下两种处理策略:若汇编代码较短,则可在C/C源文件中直接内嵌汇编语言实现混合编程。若汇编代码较长,可以单独写成汇编文件,最后以汇编文件的形式加入项目中&…

centos 7.6安装java_Hadoop的安装

为了方便后面使用Hadoop的shell命令,我先介绍Hadoop的安装。Hadoop有多种安装模式,这里介绍伪分布式的安装。我测试过Ubutun、Centos和WSL,都可以正常安装Hadoop的所有版本。所有一般不会出现版本对应的问题。Hadoop是基于Java语言进行编写的…

Python3 解题:字符串压缩

Python3 解题:字符串压缩原题 https://leetcode-cn.com/problems/compress-string-lcci/题目: 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若…

C++软件分析师异常分析工作经验汇总

点击蓝字关注我们最近几年工作当中很大一部分内容是排查软件运行过程中遇到的各种异常,积累了一定的经验,在此给大家分享一下。本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。1、软件异常的分类常…

java fix_Java中的低延迟FIX引擎

java fix总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库。 是什么使它与众不同? 是为Java中的超低GC *设计的。 支持字符串和日期时间的方式可以最大程度地减少垃圾和开销。 可自定义为仅包含您期望的字段。 使用通常在二进制解析器和生成器中使用…

linux 查看防火墙状态_每天五分钟学习Linux系列之 - 系统安全配置

20年IT从业,二哥的团队使用最多的系统就是Linux,开发,运维的小伙伴们都离不开Linux系统,特别是大数据和人工智能领域更是如此,但由于日常工作忙,小伙伴们没有太多成块的时间系统的学习Linux, 并且现版CentO…

Python3求解旋转矩阵问题

Python3求解旋转矩阵问题原题 https://leetcode-cn.com/problems/spiral-matrix/ 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8…

只针对异常的情况才使用异常_如何以及何时使用异常

只针对异常的情况才使用异常本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的旅程! 在这里查看…

C++红黑树模拟实现map和set

点击蓝字关注我们一、红黑树及其节点的设计对于底层都是红黑树的map和set来说,他们之间存在的最大的区别就是:对于set是K模型的容器,而map是KV模型的容器。为了更好的灵活兼容实现map和set,就需要在红黑树以及树节点上进行特别的设…

c语言连接mysql_聊聊数据库MySQL、SqlServer、Oracle的区别,哪个更适合你?

一、MySQL优点:体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作 ;MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地…

Python3解题:二叉树路径总和问题

Python3解题:二叉树路径总和问题原题 https://leetcode-cn.com/problems/path-sum-ii/ 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff…

绩效工作流_流绩效–您的想法

绩效工作流上周,我介绍了一些有关Java 8流性能的基准测试结果。 你们和gal足够有兴趣留下一些想法,还有哪些可以介绍。 这就是我所做的,这里是结果。 总览 最后一篇文章的序言也适用于此。 阅读它,以找出所有数字为何撒谎&#…

C语言访问MCU寄存器的两种方式

点击蓝字关注我们单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对其访问归纳起来有两种方法。1、采用标准C的强制类型转换和指针来实现采用标准C的强制转换和指针的概念来实现访问MCU的寄存器,例如:#define DDRB (*…

python中return true的用法_Return True/False何时使用它而不是Return

类比:函数是一个准备好执行任务并给出答案的可克隆助手。任务由函数的参数定义(括号内的内容)。让我们重写这些名称以赋予它们语义意义(即说明我们期望的名称)。在def isXGreaterThanY(..... 在这里,任务的…

08_优先队列

08_优先队列 一、优先队列最大优先队列最大优先队列API设计 最小优先队列最小优先队列API设计最小优先队列代码实现 索引优先队列索引优先队列实现思路索引优先队列API设计索引优先队列代码实现 一、优先队列 :::info 普通的队列是一种先进先出的数据结构,元素在队…