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

发布于 2022-08-28 12:52:49 字数 99 浏览 14 评论 0

在64位系统中,int *变量 占64位,而int 变量占32位,我想问的是计算机寻址是按64位来的,int变量占32位,内部是怎么做到的,还是说实际还是会浪费掉另外32位空间~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

过度放纵 2022-09-04 12:52:49

就x86-64系统来说,cpu是可以按照字节寻址的。 int *在64位系统上是64-bit是由于x86-64的cpu的虚拟内存寻址空间是64位,这样一个指针也需要是64位才可以容纳下一个虚拟内存的地址。int 是数据类型,表明这个数据占用32个bits的内存空间,如果你想要访问某个在内存中的int数据类型,需要一个64 bits的指向这个数据所在虚拟内存地址,这样cpu才知道去哪里访问这个数据。

旧伤还要旧人安 2022-09-04 12:52:49

那我一个占128位的struct岂不是要爆掉?:)

int *占64位是因为64位系统支持的最大寻址空间是2^64,也就是内存的“长度”。而int变量占32位,可能内存的“宽度”是32位,也可能是16位,8位,64位。。。。。。

假设内存的"宽度"是64位,如果int变量是32位的话,那么我一个地址就可以存放两个int,或者一个int四个char(如果char占8位)。。。。。随便你组合。又或者这两个int只是某个struct的一部分而已。

永远不要把内存的"宽度"(数据)和内存的"长度"(地址)混淆!

终弃我 2022-09-04 12:52:49

编址方式问题吧。
如果说浪费32位空间那么应该是按字编址的情况,即1个地址单位等同1个字长。
如果是按字节编址,即1个地址单位等同1个字节长,那么数据类型占32位还是64位,无非就是单个该类型对象占4个地址单位还是8个地址单位问题,若不考虑对齐则不会浪费空间。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文