为什么在C#中sizeof(int*) = 8,而在C++中sizeof(int*) = 4?

3

C#

 sizeof(int*)
 8

C++

 sizeof(int*)
 4

为什么会这样?在C#中,long的大小为8,在C ++中则为4。

在C++中,sizeof(int*)不是4。 - Slava
7
你为什么认为不同语言之间的数据类型应该是相同的呢?更重要的是,你是否针对相同的处理器架构进行编译?在我工作的目标系统上,“long”是32位,在我现在使用的计算机上,它要看我是为x86-32还是x86-64进行编译,分别为32位或64位。 - Mats Petersson
我的C#项目设置为任何CPU。在C++中,它设置为Win32。我认为返回的大小将是由操作系统定义的,而不是语言定义的。 - William
在64位操作系统上,您可以运行32位应用程序,但是您无法在32位操作系统上运行64位应用程序。 - nnn
回答你问题的第二部分,"sizeof long is 4 in C++" 这种说法是不存在的。"sizeof long" 是实现定义的,唯一的限制是它必须大于或等于 sizeof int。关于 sizeof long 的实际值,请查阅你所使用的 C++ 编译器文档。例如,Visual C++ 将 sizeof long 记录为 4,可以在 https://msdn.microsoft.com/en-us/library/cc953fe1.aspx 上查看。 - dxiv
4个回答

17

简单来说,您正在获取指针类型的大小。对于64位应用程序,8是一个合适的大小,而对于32位应用程序,4是合适的。

可以推测您正在运行使用64位.NET和32位C++代码的C#代码。


谢谢所有的回答,都很有道理。我只是选择了最受欢迎的答案。 - William

2

您正在64位上编译C#程序以及32位上编译C++程序。


1

指针的大小取决于处理器架构。在32位系统中,所有指针都是32位(4字节)。在64位系统中,它们是64位(8字节)。

你一定比较过64位C#应用程序和32位C++应用程序。

long 在C#和C++中是不同的类型。在C++中它是一个32位整数。在C#中它是64位。


1
操作系统和编译器的组合,以及编译器的设置,将决定指针和其他类型的大小。在所有现代64位处理器中,处理器(以及大多数操作系统)都支持运行32位和64位可执行文件,因此根据设置,您可以获得32位或64位指针大小[其他类型可能会根据编译器和操作系统组合而改变]。
C、C#和C++之所以没有固定的这些大小,是为了允许语言编译成许多不同的处理器 - 包括具有24位整数大小或9位字符(和36位int)的“奇怪”处理器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接