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