为什么指针在64位和32位系统中保持相同的大小?

时间:2011-12-10 11:38:58

标签: pointers 32bit-64bit

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

是的,您应该,但请注意,同一操作系统可以运行32位和64位代码,而在您安装的“64位操作系统”中,“64位”可能仅表示“64位能力”。

你真的应该在这里详细介绍操作系统的细节。例如,Mac OS X Snow Leopard附带了默认为64位代码的GCC和Clang版本,您可以使用选项-m32生成32位代码。也许你的64位操作系统的规则是相反的(也就是说,你应该使用-m64或类似的选项)