Re: [PATCH 1/8] lib/sort: Heapsort implementation of sort()

From: Andreas Gruenbacher
Date: Wed Feb 02 2005 - 06:17:07 EST


On Wed, 2005-02-02 at 11:50, Herbert Xu wrote:
> Andreas Gruenbacher <agruen@xxxxxxx> wrote:
> >
> > static inline void swap(void *a, void *b, int size)
> > {
> > if (size % sizeof(long)) {
> > char t;
> > do {
> > t = *(char *)a;
> > *(char *)a++ = *(char *)b;
> > *(char *)b++ = t;
> > } while (--size > 0);
> > } else {
> > long t;
> > do {
> > t = *(long *)a;
> > *(long *)a = *(long *)b;
> > *(long *)b = t;
> > size -= sizeof(long);
> > } while (size > sizeof(long));
> > }
> > }
>
> What if a/b aren't aligned?

That would be the case if the entire array was unaligned, or (size %
sizeof(long)) != 0. If people sort arrays that are unaligned even though
the element size is a multiple of sizeof(long) (or sizeof(u32) as Matt
proposes), they are just begging for bad performance. Otherwise, we're
doing byte-wise swap anyway.

--
Andreas Gruenbacher <agruen@xxxxxxx>
SUSE Labs, SUSE LINUX GMBH

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/