Memory Allocation
The MAXON API provides tools to safely allocate new memory. Typically it is not needed to allocate raw memory, structures like maxon::BaseArray should be used instead (see BaseArray Manual ). Memory is allocated using different allocators.
For object creation see Entity Creation .
These macros allocate raw memory using the maxon::DefaultAllocator :
To safely handle memory one can use references, see maxon::AutoMem in 参考 .
Alternatively one can use the finally macro to ensure the release of memory, see Finally .
// This example allocates raw memory and stores it with AutoMem.// allocate memory maxon::AutoMem<maxon::Char> data = NewMemClear ( maxon::Char , count) iferr_return ;
// use memory for ( maxon::Int i = 0; i < count; ++i) data[i] = ( maxon::Char )i;
// when the scope is left, maxon::AutoMem will free the memory
Further memory utility tools are:
// allocate memory data = NewMemClear ( maxon::Char , count) iferr_return ; copy = NewMemClear ( maxon::Char , count) iferr_return ;
// use memory for ( maxon::Int i = 0; i < count; ++i) data[i] = ( maxon::Char )i;
// copy data maxon::MemCopy (copy, data, count);
// compare const maxon::Int res = maxon::CompareMem (data, copy, count); if (res == 0) DiagnosticOutput ( "Memory blocks are identical." );
// clear memory maxon::SecureClearMem (data, count);
An allocator allocates and releases memory. Typically the maxon::DefaultAllocator is used. In rare cases when special memory alignment is needed, a custom allocator can be used.
If memory from the C standard lib is needed, use maxon::CStdLibAllocator .
// This example uses FixedBufferAllocator to define a BaseArray type which guarantees a certain amout of memory.// define a BaseArray with guaranteed 1024 bytes from the stack using FixedBufferArray = maxon::BaseArray<maxon::Char, 16, maxon::BASEARRAYFLAGS::NONE, maxon::FixedBufferAllocator<maxon::Char, 1024, maxon::DefaultAllocator> >;
// create array FixedBufferArray testArray;
// check array size const maxon::Int size = ( maxon::Int ) SIZEOF (testArray); DiagnosticOutput ( "Size: @" , size);
// fill array // as long as the needed size is less than 1024, no memory calls are invoked for ( maxon::Int i = 0; i < 1024; ++i) { testArray.Append() iferr_return ; }