【发布时间】:2019-10-03 00:30:24
【问题描述】:
ISO C 标准规定:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
我在 BIT Linux mint (19.1) 上使用 GCC-8,long int 的大小为 8。
我正在使用一个使用 GCC 7 且编译器是 64 位的应用程序。
long int 的大小为4。
编译器或操作系统是否定义了long int 的大小?
【问题讨论】:
-
这可能会有所帮助,但它本身并不是一个答案:en.wikipedia.org/wiki/64-bit_computing
-
据我所知,所有版本的 GCC 在编译 Linux x86_64 二进制文件时都使用 8 字节
long ints。另一方面,在编译 Linux x86 二进制文件时,它们都使用 4 字节long ints。这与编译器的形式或主机无关,而与目标有关。 -
我猜测 Windows 可能与 GCC 7 一起使用。Windows 具有 LLP64 数据模型,它将
long定义为 32 位(4 字节)。 -
C 标准还需要
sizeof(char) == 1、sizeof(short)*CHAR_BIT >= 16、sizeof(int)*CHAR_BIT >= 16、sizeof(long)*CHAR_BIT >= 32。