不同的编译器根据不同的 64 位模型有所不同。 比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 long 和指针是 64 位,int 保持 32 位不变。
可以运行下代码得到结果。 #includeint main() { printf("char: %d\n",sizeof(char)); printf("char *: %d\n",sizeof(char *)); printf("short: %d\n",sizeof(short)); printf("short *: %d\n",sizeof(short *)); printf("int: %d\n",sizeof(int)); printf("int *: %d\n",sizeof(int *)); printf("long: %d\n",sizeof(long)); printf("long *: %d\n",sizeof(long *)); } 在一台x86_64系统上运行结果: char: 1 char *: 8 short: 2 short *: 8 int: 4 int *: 8 long: 8 long *: 8 在一台i386系统上运行结果: char: 1 char *: 4 short: 2 short *: 4 int: 4 int *: 4 long: 4 long *: 4 在32位中,short=2 int=long=4 在64位中,short=2,int=4,long=8
in cc2530, a 8051 mcu:sizeof int = 2sizeof short = 2 sizeof char* = 2sizeof long = 4sizeof float = 4sizeof double = 4
1. 指针类型表示的是内存寻址范围,所以在32位系统,8 * 4 = 32,而64位系统 8 * 8 = 64;这个是没错的; 2. C99标准规定:sizeof(short) <= sizeof(int) <= sizeof(long). http://zhidao.baidu.com/link?url=wrvmVbgFV-yPVAq_6O5O8Kf27QCvyCsPYjts7Z1zVXAxDBAS0RhrdM_Y-jiutPMmRgQWkByUwJ2HBMr-rvZP-_