早上看了一个网友贴的面试题,
struct st
{
int i; short s; char c;
};
sizeof(struct st) 是多少?
int 4,short 2,char 1,但是sizeof(st)是8。这个就是内存对齐
再来看个例子:struct strt1{char c1; short s; char c2; int i;};
strt1 s1;
假设s1.c1地址为0;则s1.s地址为2 ; s1.c2地址为4 ; s1.i地址为 8。sizeof(s1)是12
这个是因为一般来说,内存之中偶数地址是自然边界。为了提高程序性能,一般都要向自然边界对齐,原因是不对齐的话,如果跨越边界,访问一个变量可能需要两次读操作。例如上面例子中,c2后地址为6。但是int 要站内存4b,如果跨越8就需要读两次,所以就从8开始。则sizeof(s1)是12
当然,可以自己构造结构体的顺序来提高编程质量
struct strt2{char c1;char c2;short s;int i;};地址是0 1 2 4 sizeof是8;