结构体类型数据的字节长度。有点摸不着头脑~~
typedef struct{
int i;
char name;
double score;
}student;
int main()
{
printf("学生结构体所占的字节数是 %d \n",sizeof(student));
return 0;
}
我想问一下,答案不应该是13吗?运行结果竟然是16,而且我把char name去掉了结果还是16。double是占8个字节,int是占4个字节,字符型是占1个自己。可是为什么运行出来结果却是16呢?不太想的明白。
[解决办法]
字节对齐的问题
详细见
http://blog.csdn.net/xuxinshao/article/details/2244277
[解决办法]
结构体(c++的类也是一样)字节对齐规则:
(1). 结构体成员按低地址到高地址的顺序存储在内存, 即按声明的顺序存储
(2). 每个成员的地址必须满足: 是 sizeof(该成员) 的整数倍
(3). 总的字节数是 最大内置(就是基本类型)成员所占的字节数的 整数倍.
完!
你的问题:
4 + 1 + 8 = 13;
13 不是4的倍数, 也不是8的倍数, 那就再多用3个字节了.
字节对齐的目的是提高内存的访问效率