c - 如果一个指针的地址是 64 位,为什么它在打印时显示为 6 个字节?

标签 c pointers

#include <stdio.h>
int main(void){
  int *ptr;
  printf("the value of ptr is %p",ptr);
}

这给了我 0x7fffbd8ce900,它只有 6 个字节。应该是8字节(64位)吗?

最佳答案

虽然指针是 64 位的,current processors actually only support 48 bits , 因此地址的高两个字节总是 0000 或(由于符号扩展)FFFF。

在未来,如果 48 位不再足够,新的处理器可以添加对 56 位或 64 位虚拟地址的支持,并且现有程序将能够利用额外的空间,因为它们已经在使用 64-位指针。

关于c - 如果一个指针的地址是 64 位,为什么它在打印时显示为 6 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515662/

相关文章:

c - 滚球的声音

c - 在另一台计算机上用 C 运行程序

c - 指向 C 中 const 字符串的指针

c - while 循环中的 scanf() 没有终止?

c - 最优数组推送

c - 在 `if` 条件下将变量赋值为零时会发生什么?

pointers - 隐藏 nil 值,理解为什么 golang 在这里失败

c - 这不是逐字节比较 : WHY

c - 如何让链表的最后一个节点参与冒泡排序?

delphi - 在 Delphi 的 Tqueue 中存储记录指针的正确方法是什么