【问题标题】:Why do pointers remain the same size in 64bit and 32bit systems?为什么指针在 64 位和 32 位系统中保持相同大小?
【发布时间】:2012-04-22 06:44:37
【问题描述】:

我最近在我的计算机上安装了一个 64 位操作系统,我认为 sizeof(char*) 会给我 8 而不是 4。我不应该在我的指针中获得 64 位地址吗?

【问题讨论】:

  • 你是用 64 位编译器编译的吗?

标签: pointers 32bit-64bit


【解决方案1】:

这是因为您使用的编译器发出 32 位代码。如果您使用 64 位编译器,则指针将是 8 字节宽。

请注意,大多数 64 位系统都能够在仿真层下运行 32 位代码。在 Windows 上,模拟层称为WOW64。这显然是这里发生的事情。

【讨论】:

    【解决方案2】:

    操作系统通常对代码生成没有影响。如果您运行相同的编译器和相同的库,则无论操作系统是 32 位还是 64 位,都会得到相同的代码。您可以在 64 位操作系统上编译和运行 32 位软件。您可以在 32 位操作系统上编译 64 位软件。

    编译器确定生成的代码类型。操作系统只决定你是否可以运行它。

    【讨论】:

      【解决方案3】:

      是的,您应该这样做,但请注意,同一个操作系统可以同时运行 32 位和 64 位代码,并且在您安装的“64 位操作系统”中,“64 位”可能仅表示“64 位能够”。

      您确实应该在此处提供有关操作系统细节的更多详细信息。例如,Mac OS X Snow Leopard 带有默认为 64 位代码的 GCC 和 Clang 版本,您可以使用选项 -m32 生成 32 位代码。也许在您的 64 位操作系统上该约定是相反的(也就是说,您应该使用 -m64 或类似选项)

      【讨论】:

      • 从该用户提出的问题历史来看,Windows 似乎更有可能是操作系统。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2016-02-04
      • 2019-03-19
      • 2013-10-31
      • 1970-01-01
      相关资源
      最近更新 更多