<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 12, 2013 at 8:33 PM, Marshall Clow <span dir="ltr"><<a href="mailto:mclow.lists@gmail.com" target="_blank" class="cremed">mclow.lists@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
        {<br>
        return new dArray ( 6 );<br>
        }<br>
<br>
These six longs cannot be put on the stack. When would they be deallocated?<br></blockquote><div><br></div><div>Sorry, yes, I always forget about the heap-allocated-dynarray case.</div><div><br></div><div>This just seems so fundamentally broken. How is it reasonable to heap allocate a class whose only purpose is to optimize through use of the stack? It just doesn't work.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">(There's a third case, where a dynamic array is a member variable in a class or struct, but I think these two cover it well enough)<br>

<br>
In the discussion with Nick and Richard, we came up with the idea of a compiler intrinsic that is a hint, (i.e try to put this allocation on the stack), and then, if during the compiler's optimization pass, it decides that it has enough information (i,e can see the whole lifetime of the dynarray, etc), then it can change the allocation (call to ::operator new) to a call to something like alloca. [ Same, obviously for deallocation ]</blockquote>
</div><br>Yes, this is one way we can do things. And yet, I contend the *correct* way to do this is without any hint at all and instead having the compiler simply do this for boring old std::vector *IF* it can prove a constant upper-bound on size. Otherwise, we're still stuck in the pit of having dynamic allocas which are simply not well supported in LLVM today.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Now, it is possible we could go through and build the necessary infrastructure to fully optimize even in the presence of dynamic allocas, but that is not the compiler we have today and I'm not convinced it is the compiler anyone has today.</div>
</div>