请教一个内存对齐的问题
最近在看lcc的源码,书本说这里ap->avail = (char *)((union header *)ap + 1);是为了保证avail总是指向一个对齐后的地址。不明白。。。
header就是一个block和align组成的联合体,align是宿主机上最小对齐字节数。不理解为什么跨过一个header的大小就对齐了?
/*
* 内存块
* limit是可分配地址的终点,
* avail是可分配地址的起点,
* avail前的地址都是已经分配了的。
*/
struct block {
struct block *next;
char *limit;
char *avail;
};
/* 代表最小对齐字节数 */
union align {
long l;
char *p;
double d;
int (*f) ARGS((void));
};
union header {
struct block b;
union align a;
};