Messages in this thread | | | Subject | Re: kmalloc() alignment | From | Xavier Bestel <> | Date | 06 Mar 2001 13:10:11 +0100 |
| |
Le 06 Mar 2001 09:31:01 +0100, Rogier Wolff a écrit : > > > Followup to: <20010306000652.A13992@excalibur.research.wombat.ie> > > By author: Kenn Humborg <kenn@linux.ie> > > In newsgroup: linux.dev.kernel > > > > > > On Sun, Mar 04, 2001 at 11:41:12PM +0100, Manfred Spraul wrote: > > > > > > > > > > Does kmalloc() make any guarantees of the alignment of allocated > > > > > blocks? Will the returned block always be 4-, 8- or 16-byte > > > > > aligned, for example? > > > > > > > > > > > > > 4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on > > > > 64-bit cpus. > > > > > > So, to summarise (for 32-bit CPUs): > > > > > > o Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed. > > > > > > o If you need larger alignment, you need to alloc a larger space, > > > round as necessary, and keep the original pointer for kfree() > > > > > > Maybe I'll just use get_free_pages, since it's a 64KB chunk that > > > I need (and it's only a once-off). > > My old kmalloc would actually use n+10 bytes if you request n bytes. > As memory comes in pools of powers of two, if you request 64k, you > would acutaly use 128k of memory. If you use "get_free_pages", you'll > not have the overhead, and actually allocate the 64k you need. > > I'm not sure what the slab stuff does...
A properly initialised (i.e. default settings) 64k slab would put object descriptors outside the slab itself, and so use the expected number of pages for each 64k object, I believe. Small or non n*512 sized objects are a different story.
Xav
- 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/
| |