64 位机器上 int 和 sizeof int 指针的大小

新手上路,请多包涵

我只是想知道我怎么知道我的笔记本电脑是 64 位还是 32 位机器。 (它是 64)。

所以,我考虑打印以下内容:

 int main()
{
 printf("%d",sizeof(int));
}

结果是 4,这看起来很奇怪(因为它是 64 位机器)

但是,当我打印这个时:

 int main()
{
 printf("%d",sizeof(int*));
}

结果是 8,这更有意义。

问题是:

由于我使用的是 64 位机器,因此 int 等原始类型不应该使用 8 个字节

(64位)并且按那个sizeof int应该是8?为什么不是这样?

为什么 int* 的大小是 8?

这里有点迷茫

所以提前谢谢。

原文由 Itzik984 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

不, sizeof(int) 是实现定义的,通常是 4 个字节。

另一方面,为了寻址超过 4GB 的内存(32 位系统可以做到),您的指针需要为 8 字节宽。 int* 只是将地址保存到“内存中的某处”,并且您不能仅用 32 位寻址超过 4GB 的内存。

原文由 ScarletAmaranth 发布,翻译遵循 CC BY-SA 3.0 许可协议

程序员喜欢使用 1、2、4 和 8 字节或 8、16、32 和 64 位的整数类型。只有两种整数类型可以小于 int:char 和 short。如果 int 是 64 位,那么您不能同时拥有 8、16 和 32 位这三种大小。这就是为什么编译器倾向于使 int = 32 位,所以你可以有 char = 8 位、short = 16 位、int = 32 位、long long = 64 位和 long = 32 位或 64 位。

原文由 gnasher729 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题