2015-10-21 48 views
0

在Intel文档中,我已经读过Intel x86 64位机器的C数据类型'long'的大小为8个字节。 但是,当我在我的电脑,其具有英特尔(R)核心(TM)13上运行这个简单的代码 - 64位处理器:C数据类型'long'在Intel x86 64位机器上

printf("size of long, is %d", sizeof(long));

控制台输出为4(而不是8)!任何人都可以解释这种差异或相同的原因。 谢谢

+1

安装了哪个操作系统,是32位还是64位操作系统。 – Kamal

+1

你使用什么编译器? –

+1

什么编译器和哪个版本? 32位或64位? – user3528438

回答

6

所有C标准说的是,long必须至少32位,这意味着sizeof(long) >= 4(的sizeof的单元,其被称为一个字节,对几乎所有的8位你可能遇到的平台)。

每个ABI定义了这些类型的大小。您需要有兼容的ABI来链接使用不同程序编译的代码,所以总的来说,每种操作系统的每种类型的处理器都有一个标准ABI。这只是一个趋势:某些操作系统具有多个ABI,具体取决于使用的编译器和标准库。

处理器制造商通常会定义一个ABI,但是这取决于操作系统和编译器供应商决定是否尊重它。

在x86_64上,Intel指定了一个64位的long。这是大多数操作系统所做的,但有一个主要的例外:Windows。在Windows上,标准ABI(由系统库和供应商提供的开发工具使用的)有一个32位的long。 64位类型可用int64_tlong long

-1

尝试sizeof(unsigned long long),这应该是64位。

长可能是32位

+0

'长'不保证是32位。 –

+1

其保证为Windows。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx。 – Nandu

+3

不,它可以保证* Windows的某些*编译器*。 –

相关问题