所占字节数和机器字长及编译器有关:
所以,int
、long int
、short int
的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO
制定的):
sizeof(short int) <= sizeof(int)
sizeof(int) <= sizeof(long int)
short int至少为16bit(2byte)
long int 至少应为32byte
16位编译器
char 1byte
char* 2byte
short int 2byte
int 2byte
unsigned int 2byte
float 4byte
double 8byte
long 4byte
long long 8byte
unsigned long 4byte
32位编译器
char 1byte
char* 4byte
short int 2byte
int 4byte
unsigned int 4byte
float 4byte
double 8byte
long 4byte
long long 8byte
unsigned long 4byte
64位编译器
char 1byte
char* 8byte
short int 2byte
int 4byte
unsigned int 4byte
float 4byte
double 8byte
long 8byte
long long 8byte
unsigned long 8byte
char*
表示指针变量,它存的是变量的地址,所以在同一编译器下,不管是char*
还是int*
,它们所占位数都是相同的。
32
位的寻址空间是2^32
,即32
个bit
,也就是4
个byte
,所以32
位编译器中char*
(指针变量)占4byte
。同理64
位编译器占8byte