C语言数据长度记录
数据类型 | 16位编译器(字节) | 32位编译器(字节) | 64位编译器(字节) |
---|---|---|---|
char | 1 | 1 | 1 |
int | 2 | 4 | 4 |
short int | 2 | 2 | 2 |
float | 4 | 4 | 4 |
double | 8 | 8 | 8 |
long | 4 | 4 | 8 |
long long | 8 | 8 | 8 |
指针 | 2 | 4 | 8 |
int,long,char前面可以加unsigned,表示该变量为无符号的,最高位用来表示数据而不是符号,不影响变量长度。
指针作用是寻址,所以受到编译器影响,比如32位编译器的内存最高位2^32位,也就是四个字节,所以指针长度也是四个字节,16位或64位编译器中的指针长度也是如此计算。
结构体长度除了由结构体成员变量决定,也受到字节对齐影响,在64位编译器,四字节对齐的情况下
typedef struct{
char a;
int d;
char c[3];
}Test_struct;
Test_struct中char占一个1个字节,int占4个字节,成员变量的长度为8个字节,但在4字节对齐的情况下,char占用了一个字节,剩下的三个字节并不足够int使用,所以int使用了下一个四字节的空间,然后c[3]使用了3个字节,sizeof(Test_struct)返回值位12,浪费了三个字节的空间。
但是,如果修改变量定义顺序
typedef struct{
char a;
char c[3];
int d;
}Test_struct;
这个时候sizeof(Test_struct)返回值为8。