Allocators from std.expreimantal.allocator allocate memory and return slice void[] to allocated memory. Method deallocate has as parameter void[] slice to allocated memory.

It is Ok when I call deallocate with smaller slice or I need track exact lengtht?
Example:

import std.experimental.allocator : theAllocator;
import core.lifetime : emplace;
import std.stdio;


class Base{
    int i;
}
class Derived : Base{
    int j;
}

Base make(){
void[] x = theAllocator.allocate(__traits(classInstanceSize, Derived));
    writeln("allocate: ", x.length);
    emplace!Derived(x);
    return cast(Derived)x.ptr;
}

void destruct(Base base){
void[] x = (cast(void*)base)[0 .. __traits(classInstanceSize, Base)];
    writeln("deallocate: ", x.length);
    theAllocator.deallocate(x);
}
void main(){
    Base x = make;
    scope(exit)destruct(x);

    ///some code...
}

//print:
//allocate: 24
//deallocate: 20


Reply via email to