allocating aligned memory efficiently

Joel Dice joel.dice@gmail.com
Sun Feb 21 02:36:00 GMT 2010


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.


More information about the Libc-help mailing list