在64位的Red Hat Linux用 GCC 编译链接并执行下面的程序:
#include <stdio.h>
int main()
{
printf("int byte length in 64-bit linux is: %d\n", sizeof(int));
printf("long byte length in 64-bit linux is: %d\n", sizeof(long));
printf("long long byte length in 64-bit linux is: %d\n", sizeof(long long));
return 0;
}
得到的输出为:
int byte length in 64-bit linux is: 4
long byte length in 64-bit linux is: 8
long long byte length in 64-bit linux is: 8
注意64位Linux下附带的GCC也是64位,用它编译 C 程序并生成可执行文件时,得到的可执行文件也是64位,此时long 类型的变量占 8 个字节。
还可以用64位的 GCC 编译出32位可执行程序,但必须先安装glibc的32位库,我没有尝试。
在64位Windows 7下,我用Visual Studio 2010把类似上面的程序分别编译成32位和64位的可执行文件,输出结果表明 int 总是占4字节,long总是占4字节,long long总是占8字节。
结论:
最好少使用 long 类型。
要用4字节长时就用 int,要用8字节长时就用 long long,这些类型所占字节长度不会随操作系统不同或操作系统位数变化而变化。