std.experimental.allocator API and nearly useless StatsCollector
Luis
Luis.panadero at gmail.com
Sun Jun 20 15:49:13 UTC 2021
Well, this last week I was playing using malloc/free to do some
@nogc code, and using the std.experimental.allocator API. Also, I
was trying to see a way to profile my code and search for memory
leaks, etc...
What I initially did, was implementing my own allocator API plus
my own mallocator, seeing how ECS buble engine does this.
Later, I take a look how std.experimental.allocator API works and
I ended writing my own wrapper above make, makeArray, dispose,
expandArray & shrinkArray that implements this profiler/stats,
and using std.experimental.mallocator .
Finally, I catch that I can only use my wrapper on my code, and
that I couldn't use on other third party libraries that allow to
use allocators (like EMSI Containers), because (obviously) uses
the std.experimental.allocator API.
Then, I discover
std.experimental.allocator.building_blocks.stats_collector that
looks that does what my littler profiler does, and more. But I
see tiny detail that I don't see totally ok.
The stats that are reported by reportPerCallStatistics, shows the
file & line number of the allocator!
Like this :
```
/usr/include/dmd/phobos/std/experimental/allocator/package.d(1585): [numAllocate:1, numAllocateOK:1, bytesAllocated:40]
```
This could be useful for someone writing his own allocator, but
it's pretty useless for anyone trying to track where a memory
leak originated in his own code!
On my wrapper, What I did was to have a `string file = __FILE__,
int line = __LINE__` parameters append to the make, makeArray,
dispose, etc... functions and uses the file and & line to record
where something was allocated/deallocated/reallocated.
So, why std.experimental.allocator API not does something similar
to this ? The allocator implementations, would need to pass &
ignore these two additional parameters. Except StatsCollector
that can use it to show where the
allocation/deallocation/reallocation it's happening
More information about the Digitalmars-d
mailing list