TempAlloc Overhaul
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Jun 16 20:46:42 PDT 2011
On 6/11/11 11:26 AM, dsimcha wrote:
> I've overhauled my TempAlloc proposal based on some of the suggestions
> I've received.
Review:
* Mention no safety at disadvantages: deallocating memory may leave
pointers dangling.
* The synopsis should use scope(exit) TempAlloc.frameFree(); as that is
a robust idiom.
* newArray -> "For performance reasons, the returned array is not
initialized." Then call it newUninitializedArray. Make safety the
default and lack thereof the verbose alternative.
* newArray -> "It is not scanned for pointers by the garbage collector
unless GC.addRange is called." I'd agree that malloc() shouldn't do so
because it doesn't know the type, but with newArray you do know the type
so you could automatically call GC.addRange appropriately. If the client
doesn't want that, they can obtain it with extra syntax. Since now you
have two things (uninitialized and noscan) you may want to make them
function parameters instead of part of the function name.
* I'm a bit unsure about free(). People already have the pointer, so
free() should use it as a cheap way to check that they're freeing the
right thing. There should be free(void*), freeLastAllocated(), and
possibly destroyAndFree(T)(T *).
* segmentSlack() -> segmentAvailable().
* stackCat() is a bit surprising. A better way would be something like a
TempAlloc appender that accepts a chain().
* In fact looking at tempArray() just below that's all - it can accept
chain(). No need for stackCat.
* mixin newFrame should be renamed to scopedFrame.
Andrei
More information about the Digitalmars-d
mailing list