Skip to content

Manual Memory Management

Timur Gafarov edited this page Dec 16, 2015 · 12 revisions

Manual Memory Management

From version 0.5.0, dlib supports manual memory management (MMM) based on standard C malloc/free. You can use the module dlib.core.memory to allocate classes, structs and arrays in unmanaged heap using New and Delete template functions:

import dlib.core.memory;

class MyClass 
{
    int x;

    this(int x)
    {
        this.x = x;
    }
}

MyClass obj = New!MyClass(99);
assert(obj.x == 99);
Delete(obj);

int[] arr = New!(int[])(100);
assert(arr.length == 100);
Delete(arr);

This functionality resembles C++ way of doing things, and, as you are requred to manually delete your objects, may lead to memory leaks, if used carelessly. To help you debug your applications, dlib provides a simple tool for memory profiling. To use it, compile everything with --version=memoryDebug option.

The function printMemoryLog outputs an allocation log with type and size information. Objects that remain in memory (undeleted) are marked as such.

printMemoryLog();

Example output:

----------------------------------------------------
               Memory allocation log                
----------------------------------------------------
         Foo - 12 byte(s) at 544AF0
REMAINS: int[] - 400 byte(s) at 5D07B0
REMAINS: Foo - 12 byte(s) at 544E70
----------------------------------------------------
Total amount of allocated memory: 412
----------------------------------------------------
Clone this wiki locally