【发布时间】:2014-12-05 05:50:16
【问题描述】:
当我这样做时
int k = 9;
printf("sizeof k: %zu \n", sizeof (&k));
我得到的大小为8。但是当我这样做时
printf("pointer to k: %p \n", &k);
我收到0x7fff57e3ba24。我可以看到这是 12 个十六进制数字,这意味着(因为 1 个十六进制是 4 位)指针占用 48 位,即 6 个字节。
问题:为什么 sizeof 为指针打印 8,尽管它只有 6 个字节?
【问题讨论】:
-
虽然 amd64 ISA 使用 64 位指针,但实际上目前只使用了 48 位。因此,在当今的大多数桌面系统上,您确实会看到“48 位”指针存储在 64 位插槽中。
-
@JohnZwinck 因为在如此“遥远”的位置不存在地址来占用整个 64 位? (也就是说内存没有那么多槽?)
-
@user10607:见这里:stackoverflow.com/questions/6716946/…
-
哇,通过阅读这篇文章,我真的很困惑.. 谁能告诉我整数
int不应该只分配 4 字节的内存,无论它是指针还是常规变量?请任何人回复或粘贴链接,以便我的困惑得到帮助。谢谢!!