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

关于64位系统int *,int所占空间的问题

关于64位系统int *,int所占空间的问题

慕斯王 2019-04-08 11:19:21
在64位系统中,int*变量占64位,而int变量占32位,我想问的是计算机寻址是按64位来的,int变量占32位,内部是怎么做到的,还是说实际还是会浪费掉另外32位空间~~
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

就x86-64系统来说,cpu是可以按照字节寻址的。int*在64位系统上是64-bit是由于x86-64的cpu的虚拟内存寻址空间是64位,这样一个指针也需要是64位才可以容纳下一个虚拟内存的地址。int是数据类型,表明这个数据占用32个bits的内存空间,如果你想要访问某个在内存中的int数据类型,需要一个64bits的指向这个数据所在虚拟内存地址,这样cpu才知道去哪里访问这个数据。
                            
查看完整回答
反对 回复 2019-04-08
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

那我一个占128位的struct岂不是要爆掉?:)
int*占64位是因为64位系统支持的最大寻址空间是2^64,也就是内存的“长度”。而int变量占32位,可能内存的“宽度”是32位,也可能是16位,8位,64位。。。。。。
假设内存的"宽度"是64位,如果int变量是32位的话,那么我一个地址就可以存放两个int,或者一个int四个char(如果char占8位)。。。。。随便你组合。又或者这两个int只是某个struct的一部分而已。
永远不要把内存的"宽度"(数据)和内存的"长度"(地址)混淆!
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 713 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信