处理字节对齐的函数

来源:互联网 发布:淘宝c店运营计划 编辑:程序博客网 时间:2024/05/12 22:21

所谓字节对齐问题,是指在内存中一个基本数值类型变量应该位于其sizeof大小的整数倍边界上,换句话说,就是一个基本数值类型变量的地址能够被其sizeof大小所整除。比如,对于short类型,其地址应该能够2整除,而对于double类型,则要求能被8整除。 

这样做是由CPU运算时获取值的特性决定的,现在,大多数CPU都能处理字节不对齐的问题,但对于一些嵌入式CPU,我们仍需加以重视,不然将导致程序出现异常,而且,从效率角度来讲,我们也应该避免字节不对齐的情况出现。

下面是一个将任意地址按照指定对齐大小进行向上对齐的函数:

char* make_align(char* src, size_t aligned)
{
    return (src + aligned - 1) & ~(aligned - 1);
}

上述函数要求aligned必须为2的幂,比如4、8、16等,实际中我们也只会碰到这种情况,如果要按照任意字节对齐,可以采用如下函数:

char* make_align(char* src, size_t aligned)
{
    return (src + aligned - 1) / aligned * aligned;
}

更多关于字节对齐和sizeof的内容,请参见另一篇文章:http://blog.csdn.net/freefalcon/archive/2004/07/28/54839.aspx

原创粉丝点击