More std.allocator goodies coming your way: better statistics

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Mon May 18 16:01:47 PDT 2015


On 5/18/15 1:30 PM, Timon Gehr wrote:
> On 05/18/2015 08:53 PM, Andrei Alexandrescu wrote:
>> Beautiful statistics accumulated for the allocator instance and/or per
>> call location:
>>
>> http://erdani.com/d/phobos-prerelease/std_experimental_allocator_stats_collector.html
>>
>>
>>
>> https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/stats_collector.d
>>
>>
>>
>> Destructors welcome.
>>
>>
>> Andrei
>
> - The documentation for numAllocateOK is wrong. (Allocating zero bytes
> is always successful.)

Fixed.

> - bytesHighTide is not properly updated. (I suggest to just move the
> check into the implementation of 'add' and be done with it.) Also, is
> this really the only value where it is useful to track a maximum, or
> other summaries?

Couldn't think of any, but I'm sure use will bring new ideas. In fact 
for better capacity I just made Option a 64-bit value.

> - The documentation is inconsistent on whether bytesContracted should be
> changed in deallocate; the implementation does it. (I don't see why it
> should.)

Well, in per-call stats I "reuse" it for counting calls to deallocate. I 
clarified that in the documentation. I could add another one, but 
bytesUsed is redundant with bytesAllocated - bytesDeallocated (the 
latter doesn't exist) and redundancy sux. Then bytesUsed is very useful 
because it's easy to think about ("how many bytes I'm currently using").

> - 'static struct Voldermort'

Ouch.

> - I think line 602 is not what you wanted.
>    'if (!s.next && root != &s)'
>    !s.next <-> 's' has not been added, or it is the last element of the
> list
>    root != &s <-> 's' is not the first element of the list
>
>    I.e. if 's' is the last element of a list that contains more than one
> element, the list will become cyclic.

That explains a number of things :o). Fixed.


Thanks!

Andrei


More information about the Digitalmars-d mailing list