Custom String vs D String performance
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 5 04:53:12 PDT 2016
Dne 5.9.2016 v 13:45 Patric via Digitalmars-d-learn napsal(a):
> 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
>
> (!!!)
Do you have windows or linux? Which version of dmd you have?
More information about the Digitalmars-d-learn
mailing list