24-May-2013 09:02, Manu пишет:
On 24 May 2013 14:11, Marco Leise <marco.le...@gmx.de
<mailto:marco.le...@gmx.de>> wrote:

    Am Thu, 23 May 2013 20:21:47 -0400
    schrieb "Jonathan M Davis" <jmdavisp...@gmx.com
    <mailto:jmdavisp...@gmx.com>>:

     > At some point, we're probably going to need to
     > benchmark stuff more agressively and optimize Phobos in general
    more, because
     > it's the standard library. And eliminating unnecessary memory
    allocations
     > definitely goes along with that.
     >
     > - Jonathan M Davis

    On a related note, a while back I benchmarked the naive Phobos
    approach to create a Windows API (wchar) string from a D
    string with using alloca to convert the string on a piece of
    stack memory like this: http://dpaste.1azy.net/b60d37d4
    IIRC it was 13(!) times faster for ~100 chars of English text
    and 5 times for some multi-byte characters.
    I think this approach is too hackish for Phobos, but it
    demonstrates that there is much room.


I don't think it's hack-ish at all, that's precisely what the stack is
there for. It would be awesome for people to use alloca in places that
it makes sense.
Especially in cases where the function is a leaf or leaf-stem (ie, if
there is no possibility of recursion), then using the stack should be
encouraged.
For safety, obviously phobos should do something like:
   void[] buffer = bytes < reasonable_anticipated_buffer_size ?
alloca(bytes) : new void[bytes];

toStringz is a very common source of allocations. This alloca approach
would be great in those cases, filenames in particular.

Alternatively just make a TLS buffer as scratchpad and use that everywhere.

--
Dmitry Olshansky

Reply via email to