鱼C论坛

 找回密码
 立即注册
查看: 2497|回复: 5

为什么指针大小是四个字节呢

[复制链接]
发表于 2020-5-16 11:14:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将指针设置为四个字节也就是32bits 是为了让数据访问更快吗?
为什么8bits访问就不行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-16 11:16:36 | 显示全部楼层
1、指针是一种极其特殊的数据类型,它不像基本数据类型那样可以直接赋值到内存空间,因此指针的空间是无法存取数据的。因此,不妨提出这样一个疑问,指针的空间中到底存储的是什么?答案是:地址。那么地址是什么,它总得有一串形式将其表现出来吧。是的,其表现形式是一串数字。而基本数据类型的多数表现形式也是一串数字,因此初见指针的感觉就像美国对于亚太地区的政策一样:混乱可控。不过话又说回来:看到底层时,谁又不是谁的数字呢,世界都是数字的,AI引领的时代,我们会慢慢看见。回来,因此指针和基本数据类型是表现形式有所雷同,但其本质却截然不同。

2.先引导一下32位操作系统,32位操作系统之所以被称之为32位操作系统, 是因为CPU所能处理的数据的最大位数是32位。而一个字节刚好是8位,因此是4个字节。

3.再说32位操作系统所能支持的最大内存的大小是(-1)Byte ≈ 4,294,967,295 Byte.大约是4G。先按下32位操作系统为什么支持的最大内存的大小是4G不说,我们先说说CPU的寻址。

4.CPU是按地址寻找数据的,那么衡量寻址能力大小的参数故而就是地址位数,即地址宽度。要达到内存的最大支持位数,“地址线”位数要与CPU命令位数一样。CPU位数为32位,那么"地址线总位数"也必须是32位。当CPU命令位数达到饱和时,地址总线位数则达到饱和。 所以,内存总字节数 = 字节数宽度 * 1Byte

材料引用 CSDN 论坛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 11:26:28 | 显示全部楼层
Twilight6 发表于 2020-5-16 11:16
材料引用 CSDN 论坛

所以这样做的好处就是加快出处理器的执行速度吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 11:34:47 | 显示全部楼层
xiaosdm 发表于 2020-5-16 11:26
所以这样做的好处就是加快出处理器的执行速度吗?

指针大小和机器字长相同,即32位机指针长度为4字节,64位长度为8字节。是和操作系统、编译器,的使用有关系。至于是否加快速度,这我就不懂了。。。感觉像在问为什么1+1不能等于3呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 11:44:28 | 显示全部楼层
跟处理器执行速度无关吧,看你系统是多少位的决定指针的大小
比如32位系统指针大小是4个字节 64位系统指针大小是8个字节
为什么是这样?
CPU是按地址寻找数据的,cpu寻址的最小单位是字节Byte,那么32位的系统支持的最大地址量是2×32次方 等于4294967296 也就是支持4G左右的内存
那么就需要指针为4个字节 1个字节8位 刚好32位 才能将整块内存地址寻址
64位类似 需要8个字节 即8个字节的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 14:28:21 From FishC Mobile | 显示全部楼层
不是为了访问数据更快,指针代表一个地址,地址用来表示内存空间所在位置,八位没法访问到,32位编译指针是四字节,64位编译指针是八字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表