英特尔x86 64位计算机上的C数据类型'long'

use*_*053 0 c

在英特尔文档中我已经读过,对于Intel x86 64位机器,C数据类型'long'的大小是8字节.但是,当我在我的计算机上运行这个简单的代码时,它有intel(R)core(TM)i3 - 64位处理器:

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

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

Gil*_*il' 6

所有C标准都说long必须至少为32位,这意味着sizeof(long) >= 4(单位sizeof称为字节,几乎在您可能遇到的所有平台上都有8位).

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

处理器制造商通常会定义ABI,但是由操作系统和编译器供应商来决定是否尊重它.

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