On Friday, 5 August 2016 at 20:54:59 UTC, Mark "J" Twain wrote:
On Friday, 5 August 2016 at 20:43:12 UTC, H.Loom wrote:
On Friday, 5 August 2016 at 19:55:22 UTC, Mark "J" Twain wrote:
[...]
You can wrap the C memory allocations functions with a version
identifier, e.g
version(stat)
{
__gshared size_t[size_t] sizes;
}
version(stat)
{
auto malloc(size_t size)
{
auto result = std.c.stdlib.malloc(size);
sizes[result] = size;
return result;
}
}
else alias malloc = std.c.stdlib.malloc;
version(stat)
{
void free(void* ptr)
{
std.c.stdlib.free(ptr);
sizes.remove(ptr);
}
}
else alias free = std.c.stdlib.free;
that a bit a DIY but this would work.
Yeah, I ended up just storing the sizes in the ptr on malloc.
Essentially the same but I don't have to keep a global around
and deal with that.
you cannot get rid of a global variable to store the sizes. Even
if it's hidden in an API you didn't write, in which case it's
just hidden.
Have you looked at experimental allocators ?