Cデータ整列アルゴリズム
私たちはデータを処理するとき、8バイト、16バイトの位置合わせなど、データバイトの位置合わせを要求することがよくあります.一般的に考えられている方法は、次のとおりです.
しかし、このアルゴリズムの効率は非常に低く、以下に効率的なデータ整列アルゴリズムを紹介する.
このアルゴリズムの原理は次のとおりです.
(align-1):2バイトが1、4バイトが11、8バイトが111、16バイトが1111...
(&~(align-1):アラインメントビットデータを0、そのビットを1にする
(n+(align-1)&~(align-1):整列後のデータ
unsigned int calc_align(unsigned int n,unsigned align)
{
if ( n / align * align == n)
return n;
return (n / align + 1) * align;
}
しかし、このアルゴリズムの効率は非常に低く、以下に効率的なデータ整列アルゴリズムを紹介する.
unsigned int calc_align(unsigned int n,unsigned align)
{
return ((n + align - 1) & (~(align - 1)));
}
このアルゴリズムの原理は次のとおりです.
(align-1):2バイトが1、4バイトが11、8バイトが111、16バイトが1111...
(&~(align-1):アラインメントビットデータを0、そのビットを1にする
(n+(align-1)&~(align-1):整列後のデータ