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