Messages in this thread | ![/](/images/icornerl.gif) | | Subject | Re: [PATCH 1/8] lib/sort: Heapsort implementation of sort() | From | Andreas Gruenbacher <> | Date | Wed, 02 Feb 2005 12:14:07 +0100 |
| |
On Wed, 2005-02-02 at 11:50, Herbert Xu wrote: > Andreas Gruenbacher <agruen@suse.de> 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@suse.de> SUSE Labs, SUSE LINUX GMBH
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |