dmd.root.rmem

Allocate memory using malloc or the GC depending on the configuration.

Authors

Walter Bright, https://www.digitalmars.com

Source: root/rmem.d

  • Declaration

    pure nothrow @nogc @trusted void* pureMalloc(size_t size);
    pure nothrow @nogc @trusted void* pureCalloc(size_t nmemb, size_t size);
    pure nothrow @nogc @system void* pureRealloc(void* ptr, size_t size);
    pure nothrow @nogc @system void pureFree(void* ptr);

    Pure variants of C's memory allocation functions malloc, calloc, and realloc and deallocation function free.

    Discussion

    UNIX 98 requires that errno be set to ENOMEM upon failure. https://linux.die.net/man/3/malloc However, this is irrelevant for DMD's purposes, and best practice protocol for using errno is to treat it as an out parameter, and not something with state that can be relied on across function calls. So, we'll ignore it.

    See Also

    D's rules for purity, which allow for memory allocation under specific circumstances.

  • Declaration

    pure nothrow char[] xarraydup(const(char)[] s);

    Makes a null-terminated copy of the given string on newly allocated memory. The null-terminator won't be part of the returned string slice. It will be at position n where n is the length of the input string.

    Parameters

    const(char)[] s

    string to copy

    Return Value

    A null-terminated copy of the input array.

    Examples

    1. auto s1 = "foo"; auto s2 = s1.xarraydup; s2[0] = 'b'; assert(s1 == "foo"); assert(s2 == "boo"); assert(*(s2.ptr + s2.length) == '\0'); string sEmpty; assert(sEmpty.xarraydup is null);

  • Declaration

    pure nothrow T[] arraydup(T)(scope const T[] s);

    Makes a copy of the given array on newly allocated memory.

    Parameters

    T[] s

    array to copy

    Return Value

    A copy of the input array.

    Examples

    1. auto s1 = [0, 1, 2]; auto s2 = s1.arraydup; s2[0] = 4; assert(s1 == [0, 1, 2]); assert(s2 == [4, 1, 2]); string sEmpty; assert(sEmpty.arraydup is null);