int类型究竟占⼏个字节
我最近也在看深⼊理解计算机系统这本书,上⾯提到了在32位机器和64机器中int类型都占⽤4个字节。后来,别⼈查了The C Programming language这本书,⾥⾯有⼀句话是这样的:
Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long
.意思⼤致是编译器可以根据⾃⾝硬件来选择合适的⼤⼩,但是需要满⾜约束:short和int型⾄少为16位,long型⾄少为32位,并且short型长度不能超过int型,⽽int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,⽽当前主流的编译器中⼀般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下⾯列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:float几个字节多少位
C类型          32              64
char            1              1
short int            2              2
int            4              4
long int            4              8
long long int            8              8
char*            4              8
float            4              4
double            8              8
需要说明⼀下的是指针类型存储的是所指向变量的地址,所以指针是全字长的,所以32位机器只需要32bit,⽽64位机器需要 64bit 。
经过询问,⽹上查以及测试,发现数据类型占内存的位数实际上与操作系统的位数和编译器(不同编译器⽀持的位数可能有所不同)都有关,具体某种数据类型占字节数得编译器根据操作系统位数两者之间进⾏协调好后分配内存⼤⼩。具体在使⽤的时候如想知道具体占内存的位数通过sizeof(int)可以得到准确的答案。