不同的编译器根据不同的 64 位模型有所不同。 比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 long 和指针是 64 位,int 保持 32 位不变。
可以运行下代码得到结果。#include <stdio.h>int 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: 1char *: 8short: 2short *: 8int: 4int *: 8long: 8long *: 8在一台i386系统上运行结果:char: 1char *: 4short: 2short *: 4int: 4int *: 4long: 4long *: 4 在32位中,short=2 int=long=4在64位中,short=2,int=4,long=8 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-_
时间: 2024-11-06 10:08:43