I'm not having success trying to use the allocator API.

What am doing wrong here? (OS X, 64-bit)

    void main()
    {
        import std.exception;
        import std.experimental.allocator;
        import std.experimental.allocator.building_blocks.region;
        import std.stdio;

        static InSituRegion!1024 ralloc;
        IAllocator alloc = allocatorObject(&ralloc);

        enforce(alloc.make!int !is null);
        enforce(alloc.deallocateAll());

        enforce(alloc.make!int !is null);
        writeln("OK 1");

        enforce(alloc.deallocateAll());
        writeln("OK 2");
    }

    $ rdmd -g test.d
    OK 1
    Segmentation fault: 11


BTW, there doesn't seem to be any primitive like tryMake or an allocator building block that throws instead of returning null. I wanted to just replace my "new X" statements with a region allocator and leave the rest unchanged, so I had to create my own tryMake which wraps make calls with an enforcement of !is null. I was surprised by this omission (or did I miss something?). BTW, notice that I don't ever expect my allocator to return null unless there is a bug in my program, since the amount of memory needed is statically computed and carefully used, so it makes a lot of sense for me to just throw OutOfMemoryException.

Reply via email to