【问题标题】:Why my pointer size is 4 bytes on a 64 bit computer?为什么我的指针大小在 64 位计算机上是 4 字节?
【发布时间】:2018-10-11 10:38:55
【问题描述】:

编译器说我的指针是 4 字节,但我的电脑是 64 位操作系统。 它不应该说它是 8 个字节而不是 4 个字节吗? 是什么导致了这个问题? IDE 是这样做的吗?也许,编译器也许?

int *p;
printf("%d", (int)sizeof(p));


compiler says: 4

【问题讨论】:

  • 请尝试创建一个Minimal, Complete, and Verifiable Example 向我们展示您如何检查指针的大小。
  • 你的编译器是什么?你如何编译?您可能会在 64 位主机上编译 32 位架构(某些 Visual Studio 版本的默认行为)?
  • printf("(void*) needs %d bits\n", (int)(CHAR_BIT * sizeof (void*)));
  • 您显示的代码实际上具有undefined behavior,因为您的格式规范和参数类型不匹配。 sizeof 运算符产生size_t 类型的值,如果你想打印它,你应该使用"%zu"。参见例如this printf reference 了解详情。它似乎起作用的可能原因与您得到意外结果的原因相同:您正在为 32 位目标构建。
  • 您仍然需要描述编译/链接代码时的构建选项。

标签: c byte 64-bit


【解决方案1】:

您的编译器和编译器选项定义了实际目标。操作系统无关紧要,因为您可以在 32 位机器上编译 64 位代码(您将无法执行它),而在 64 位机器上编译 32 位代码。

如果指针的 sizeof 为 4 字节,则表示您编译的是 32 位代码。在许多 64 操作系统上,您可以执行 32 位代码。

【讨论】:

    【解决方案2】:

    我一直在寻找相同的答案,但我发现我必须改变 //Build -> Configuration Manager -> Active solution platform to x64 // 使其成为 8 字节值。 希望这对您使用 Visual Studio Community 2019 有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2014-01-10
      • 1970-01-01
      • 2014-03-07
      相关资源
      最近更新 更多