注意:字节对齐
struct CAT_s
{int ld;
char Color;
unsigned short Age;
char *Name;
void(*Jump)(void);
}Garfield;
使用32位编译,int占4, char 占1, unsigned short int占2,char*占4,函数指针占4个,由于是32位编译是4字节对齐,所以该结构体占16个字节。(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是int是最长的字节,所以按4字节对齐)
使用64位编译 ,int占4, char 占1, unsigned short int占2,char*占8,函数指针占8个,由于是64位编译是8字节对齐,(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是函数指针是最长的字节,所以按8字节对齐)所以该结构体占24个字节。
不能平台数据类型与所占字节表:
数据类型 | 32位机(字节) | 64位机(字节) | 备注 |
---|---|---|---|
char |
1 |
1 |
|
short |
2 |
2 |
|
int |
4 |
4 |
|
long |
4 |
8 |
32位与64位不同 |
float |
4 |
4 |
|
char * |
4 |
8 |
其他指针类型如long *, int * 也是如此 |
long long |
8 |
8 |
|
double |
8 |
8 |
|
long double |
10/12 |
10/16 |
有效位10字节。32位为了对齐实际分配12字节;64位分配16字节 |