Custom String vs D String performance
Patric via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 5 04:45:17 PDT 2016
On Monday, 5 September 2016 at 11:20:08 UTC, rikki cattermole
wrote:
> On 05/09/2016 11:11 PM, Patric wrote:
>> I´m playing remaking D functionalities with nogc structs, and
>> to at
>> least match D performance.
>> But in this particular case i´m unable to get near D
>> performance. Can
>> someone point me out what i´m doing wrong, or if there is some
>> magic
>> behind the curtains on D strings?
>>
>> https://dpaste.dzfl.pl/1c981fdc71ac
>
> Ok lots of bad assumptions in there so lets declare what they
> should be:
>
> 1. D supports three string types, string, wstring and dstring
> with the character types of char, wchar and dchar.
> Strings themselves have no special behavior in the compiler
> as they are arrays.
> 2. Types such as char are fixed in size, no point multiplying
> when its a constant 1.
> 3. A D string is length then pointer.
>
> Ok, now on to implementation do not use StopWatch for
> benchmarking. Use benchmark[0]. This will execute the benchmark
> many times which removes one off errors.
>
> Don't directly call malloc, it will never be free'd in this
> case.
> ``new char(length)`` would be better as it will automatically
> be handled by the GC.
> You'll also want to reserve a block of memory to remove
> allocation from the cost as much as possible (after all you're
> not measuring that are you?). Don't forget to disable the GC as
> well so it doesn't try to collect during the tests.
>
> [0] https://dlang.org/phobos/std_datetime.html#.benchmark
> [1] http://dlang.org/spec/type.html
> [2] http://dlang.org/spec/abi.html
> [3]
> https://github.com/dlang/druntime/blob/master/src/object.d#L41
I´m aware of 1, and 2.
I look one million times on datetime and did´nt see the
benchmark, thanks xD
My intention is to not use gc at all, so no "new" for me.
Yes the optimal case will be reserve the memory beforehand, but
i´m benchmarking the opBinary.
So now a bit better example :)
https://dpaste.dzfl.pl/b9356f57a8c8
Daniel Kozak:
Ok, now it gets a bit weird.
On DPaste it shows:
14 ms and 343 μs - DString
3 ms and 928 μs - CustomString
And on my PC (with dub release mode) :
7 ms, 885 μs, and 9 hnsecs - DString
18 ms, 740 μs, and 8 hnsecs - CustomString
(!!!)
More information about the Digitalmars-d-learn
mailing list