On 24 May 2013 19:40, Dmitry Olshansky <dmitry.o...@gmail.com> wrote:
> 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<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. How is that any different than just using the stack in practise?