D on next-gen consoles and for game development
Dmitry Olshansky
dmitry.olsh at gmail.com
Fri May 24 02:40:02 PDT 2013
24-May-2013 09:02, Manu пишет:
> On 24 May 2013 14:11, Marco Leise <Marco.Leise at gmx.de
> <mailto:Marco.Leise at gmx.de>> wrote:
>
> Am Thu, 23 May 2013 20:21:47 -0400
> schrieb "Jonathan M Davis" <jmdavisProg at gmx.com
> <mailto:jmdavisProg at 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
More information about the Digitalmars-d
mailing list