View source code
Display the source code in core/memory.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Function core.memory.GC.realloc

Extend, shrink or allocate a new block of memory keeping the contents of an existing block

static void* realloc (
  void* p,
  ulong sz,
  uint ba = 0u,
  const(TypeInfo) ti = null
) pure;

If sz is zero, the memory referenced by p will be deallocated as if by a call to free. If p is null, new memory will be allocated via malloc. If p is pointing to memory not allocated from the GC or to the interior of an allocated memory block, no operation is performed and null is returned.

Otherwise, a new memory block of size sz will be allocated as if by a call to malloc, or the implementation may instead resize or shrink the memory block in place. The contents of the new memory block will be the same as the contents of the old memory block, up to the lesser of the new and old sizes.

The caller guarantees that there are no other live pointers to the passed memory block, still it might not be freed immediately by realloc. The garbage collector can reclaim the memory block in a later collection if it is unused. If allocation fails, this function will throw an OutOfMemoryError.

If ba is zero (the default) the attributes of the existing memory will be used for an allocation. If ba is not zero and no new memory is allocated, the bits in ba will replace those of the current memory block.

Parameters

NameDescription
p A pointer to the base of a valid memory block or to null.
sz The desired allocation size in bytes.
ba A bitmask of the BlkAttr attributes to set on this block.
ti TypeInfo to describe the memory. The GC might use this information to improve scanning for pointers or to call finalizers.

Returns

A reference to the allocated memory on success or null if sz is zero or the pointer does not point to the base of an GC allocated memory block.

Throws

OutOfMemoryError on allocation failure.

Example

enum size1 = 1 << 11 + 1; // page in large object pool
enum size2 = 1 << 22 + 1; // larger than large object pool size

auto data1 = cast(ubyte*)GC.calloc(size1);
auto data2 = cast(ubyte*)GC.realloc(data1, size2);

GC.BlkInfo info = GC.query(data2);
assert(info.size >= size2);

Authors

Sean Kelly, Alex Rønne Petersen

License

Boost License 1.0