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

Pointers 为什么指针在64位和32位系统中保持相同的大小?,pointers,32bit-64bit,Pointers,32bit 64bit,我最近在我的电脑上安装了一个64位操作系统,我想sizeof(char*)会给我8而不是4。我不应该在指针中获得64位地址吗?这是因为您使用的编译器正在发出32位代码。如果使用64位编译器,则指针的宽度将为8字节 请注意,大多数64位系统都能够在仿真层下运行32位代码。在Windows上,仿真层称为。这显然就是这里发生的事情。这是因为您使用的编译器正在发出32位代码。如果使用64位编译器,则指针的宽度将为8字节 请注意,大多数64位系统都能够在仿真层下运行32位代码。在Windows上,仿真层称

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

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


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

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


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

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


你真的应该在这里提供更多关于操作系统细节的细节。例如,Mac OS X Snow Leopard附带了默认为64位代码的GCC和Clang版本,您可以使用选项
-m32
生成32位代码。也许您的64位操作系统(也就是说,您应该使用
-m64
或类似的选项)上的约定是相反的是的,您应该这样做,但请注意,同一操作系统可以同时运行32位和64位代码,并且在您安装的“64位操作系统”中,“64位”可能仅表示“64位可运行”


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

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


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

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


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

您是使用64位编译器编译的吗?您是使用64位编译器编译的吗?从该用户提问的历史来看,Windows更可能是操作系统。从该用户提问的历史来看,Windows更可能是操作系统。