This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: allocating aligned memory efficiently


On Sat, 20 Feb 2010, Carlos O'Donell wrote:

On Fri, Feb 19, 2010 at 7:34 PM, Joel Dice <joel.dice@gmail.com> wrote:
Hi all,

I have a problem which involves allocating memory in chunks, each of a size
which is a multiple of 64K and each aligned to an address divisible by 64K.
?I'd like to make these allocations as memory-efficient as possible,
minimizing fragmentation and heap management overhead, and I'd like to free
each one back to the OS promptly when it's no longer needed.

Your last requirement is not honoured by glibc, the allocator attempts to maximize performance by reusing already mapped blocks of memory, it does not free them promptly (if ever).

The posix_memalign(3) and free(3) functions seem to have the semantics I
want. ?Is this pair the most efficient option for my problem, or would I be
better off using mmap(2) or some other mechanism?

If you want it free'd back to the OS promptly then I suggest you use mmap(2) and manage the memory yourself.

That makes sense, thanks.


In order to get the alignment I want, I will ask mmap for 64K more than I need and then immediately trim the excess using munmap so that the result starts on an aligned address. If there's a better way, I'd be glad to hear it.
Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]