[llvm-commits] [unladen-swallow] Re: Patch to allow the JITMemoryManager to allocate more blocks of memory

Evan Cheng evan.cheng at apple.com
Wed Jul 15 22:41:23 PDT 2009


On Jul 14, 2009, at 11:39 AM, Reid Kleckner wrote:

> On Mon, Jul 13, 2009 at 10:37 PM, Evan Cheng<evan.cheng at apple.com>  
> wrote:
>>
>> Hi Reid,
>>
>> Thanks. A couple of comments.
>>
>> Can you change CheckInvariants() to return true / false and the error
>> message by reference instead?
>
> Sure.  That's nice because it makes the ostream deconstructor will
> automatically flush things, whereas it didn't before.
>
>> +  /// BumpAllocator - This is a simple memory allocator that  
>> simply bumps a
>> +  /// pointer forwards across a slab of memory until it runs out,  
>> at which
>> +  /// point it allocates a new slab.  If the size of an allocation  
>> is above
>> a
>> +  /// certain threshold, the allocator allocates a separate slab  
>> for it, to
>> +  /// avoid wasted space.  We use this class to allocate function  
>> stubs and
>> +  /// global data structures.
>> +  class BumpAllocator {
>>
>> Is there a reason not to use the BumpPtrAllocator in Support/ 
>> Allocator.h?
>
> That allocator uses malloc.  One of the things I was trying to do is
> get all the code and globals laid out contiguously in memory by using
> the NearBlock parameter of sys::Memory::AllocateRWX.  That isn't
> particularly reliable, and it's not even supported on Windows.  It
> would still be nice to get all slab allocation centralized through the
> memory manager instead of through malloc, though.
>
> I could parameterize the allocator in Support to use either malloc or
> the JITMemoryManager, or I could just use mine or the one in Support
> wholesale.  Which would you prefer?

How about changing the allocator in Support to use AllocateRWX? On  
Windows, can it fallback to malloc?

Evan
>
>> +    for (MemoryRangeHeader *Hdr = (MemoryRangeHeader*)Start,  
>> *LastHdr =
>> NULL;
>> +         Start <= (char*)Hdr && (char*)Hdr < End;
>> +         Hdr = &Hdr->getBlockAfter()) {
>> +      if (Hdr->ThisAllocated == 0) {
>>
>> How about "if (!Hdr->ThisAllocated) continue;" to reduce indentation.
>> Thanks,
>
> That can't be done, since the 'if' doesn't cover the entire body of
> the for loop.  I did notice that the 'else if' clause will never
> execute because ThisAllocated is a one bit field, so I dropped that.
>
> Thanks for the review,
> Reid
> <JITMemoryManager.diff>_______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list