所谓字节对齐问题,是指在内存中一个基本数值类型变量应该位于其sizeof大小的整数倍边界上,换句话说,就是一个基本数值类型变量的地址可以被其sizeof大小所整除。好比,对于short类型,其地址应该可以2整除,而对于double类型,则要求能被8整除。 函数
这样作是由CPU运算时获取值的特性决定的,如今,大多数CPU都能处理字节不对齐的问题,但对于一些嵌入式CPU,咱们仍需加以重视,否则将致使程序出现异常,并且,从效率角度来说,咱们也应该避免字节不对齐的状况出现。spa
下面是一个将任意地址按照指定对齐大小进行向上对齐的函数:code
char* make_align(char* src, size_t aligned) { return (src + aligned - 1) & ~(aligned - 1); }
上述函数要求aligned必须为2的幂,好比四、八、16等,实际中咱们也只会碰到这种状况,若是要按照任意字节对齐,能够采用以下函数:orm
char* make_align(char* src, size_t aligned) { return (src + aligned - 1) / aligned * aligned; }