32位和64位系统下 int、char、long、double所占的内存
8字节为上限
C类型 | 30位机器(字节) | 64位机器(字节) |
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long int | 4 | 8 |
long long | 8 | 8 |
char * | 4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
#include<stdio.h> struct A { int a; char b; double c; char d; }; struct B { char a; double b; char c; }; int main() { printf("int =%lu,char=%lu,double=%lu\n",sizeof(int),sizeof(char),sizeof(double)); printf("structA=%lu structB=%lu\n",sizeof(struct A),sizeof(struct B)); return 0; } //64位 最多可以8位字节对齐 (先4位,遇8位变8位对齐) //32位 最多可以4位字节对齐
//64位编译输出: int =4,char=1,double=8 structA=24 structB=24 // structA: 4+(1+3)+8+(1+7) = 24 // structB: (1+7)+8+(1+7) = 24 //未遇到8位数据类型时时4字节对齐,遇到8字节数据类型变为8字节对齐 //32位编译输出: int =4,char=1,double=8 structA=20 structB=16 // struct A : 4+(1+3)+8+(1+3) = 20 // struct B : (1+3)+8+(1+3) = 16
//不管怎么样都只能是4字节对齐