Get size of mem to free by free

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 5 14:25:41 PDT 2016


On 08/05/2016 12:55 PM, Mark J Twain wrote:
> I use malloc to allocate some memory, then free it later. For monitoring
> purposes, I would like to know how much is free'ed by free by just
> knowing the object. Or, rather, given a ptr allocated by malloc, bet the
> block size it allocated from the ptr alone.
>
> Some C compilers have special intrinsics and such for this, does D have
> any ability? If not, any hacks? I just need something that works.
>

malloc stores the allocation size and other information right before the 
pointer that it returns. You can do better than I do below if you know 
the exact objects that it stores there. And of course you don't need a 
struct. I just liked the property idea there. :)

import std.stdio;
import core.stdc.stdlib;

struct AllocatedMemory {
     void *p;

     alias SizeType = size_t;    // perhaps ulong?

     @property SizeType size() {
         return *cast(SizeType*)(p - SizeType.sizeof);
     }
}

void myFree(void * p) {
     auto a = AllocatedMemory(p);
     writefln("Freeing something like 0x%x bytes", a.size);
}

void main() {
     auto p = malloc(0x12345);
     myFree(p);
}

Prints:

Freeing something like 0x12351 bytes

Ali



More information about the Digitalmars-d-learn mailing list