为了账号安全,请及时绑定邮箱和手机立即绑定

求大神,哪里错了?

64位机的内存地址为什么有0Xffffffffff位,假如内存这么大,一个内存单元8bit,那内存空间算出来是很大的。实际上内存绝不可能这么大。那这么多编号怎么回事,难道有些编号没占空间?是哪里想错了?

正在回答

2 回答

1,0XFF FF FF FF  应该是8个F  

2,8bit 是代表8个二进制位  8个二进制 可以用一个字节表示 1 Byte  64位就是8个字节 8byte 

3,既然是64位  那么 我们定义指针 一般 也会使用 64来表示一个地址,相对于 64位的系统 一般表示 一次能计算的数据长度是64位,还有寄存器 什么的 也是64位的 这个就是硬件了。那么 如果一个地址用64位来表示 在 实现上 相对来说比较简单 这个实现 不是说地址线  一般地址线 应该是50左右吧 或者更少

4,既然使用了64位 来操作 地址 那么 理论上64位 数字能表达的最大范围确实就是 0XFF FF FF FF

但是实际上确实 没有 这么大的内存  。确实很多位 理论上用不到 

不过一般情况下这个地址 是个虚拟地址  只是映射到具体地址 之前看到的,这个就由操作系统来做映射了

还有就是 这样 有一个 好处就是 操作系统 可以 使用虚拟技术 

让你以为 内存 足够大  而可以给你的 应用分配 理论上超出实际内存 的空间 来使用

那些 编号 既然不是真实的 所以你使用时候  也不必关心 他到底 真实值是多少  交给系统就好了 






0 回复 有任何疑惑可以回复我~

64位操作系统理论上能管理的内存地址是这么多,但是实际上我们买内存条,根本买不到这么大的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Linux C语言指针与内存
  • 参与学习       116274    人
  • 解答问题       250    个

指针-C语言的核心,代领大家对c语言有更加深刻的理解

进入课程

求大神,哪里错了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信