【发布时间】:2012-04-22 06:44:37
【问题描述】:
我最近在我的计算机上安装了一个 64 位操作系统,我认为 sizeof(char*) 会给我 8 而不是 4。我不应该在我的指针中获得 64 位地址吗?
【问题讨论】:
-
你是用 64 位编译器编译的吗?
标签: pointers 32bit-64bit
我最近在我的计算机上安装了一个 64 位操作系统,我认为 sizeof(char*) 会给我 8 而不是 4。我不应该在我的指针中获得 64 位地址吗?
【问题讨论】:
标签: pointers 32bit-64bit
这是因为您使用的编译器发出 32 位代码。如果您使用 64 位编译器,则指针将是 8 字节宽。
请注意,大多数 64 位系统都能够在仿真层下运行 32 位代码。在 Windows 上,模拟层称为WOW64。这显然是这里发生的事情。
【讨论】:
操作系统通常对代码生成没有影响。如果您运行相同的编译器和相同的库,则无论操作系统是 32 位还是 64 位,都会得到相同的代码。您可以在 64 位操作系统上编译和运行 32 位软件。您可以在 32 位操作系统上编译 64 位软件。
编译器确定生成的代码类型。操作系统只决定你是否可以运行它。
【讨论】:
是的,您应该这样做,但请注意,同一个操作系统可以同时运行 32 位和 64 位代码,并且在您安装的“64 位操作系统”中,“64 位”可能仅表示“64 位能够”。
您确实应该在此处提供有关操作系统细节的更多详细信息。例如,Mac OS X Snow Leopard 带有默认为 64 位代码的 GCC 和 Clang 版本,您可以使用选项 -m32 生成 32 位代码。也许在您的 64 位操作系统上该约定是相反的(也就是说,您应该使用 -m64 或类似选项)
【讨论】: