Memory Manager Library

This library provides routines for manipulating dynamic memory allocation. Dynamic memory allocation (also known as heap-based memory allocation) is the allocation of memory storage for use in a program during the runtime of that program.
Dynamically allocated memory exists until it is released. This is in contrast to static memory allocation, which has a fixed duration. It is said that an object so allocated has a dynamic lifetime.

The heap memory size can be configured in the Edit Project window. Also, user can override heap memory size in the code, by setting the HEAP_SIZE constant.

Library Routines

MM_Init

Prototype

sub procedure MM_Init()

Description

Initializes the memory manager.

Parameters

None.

Returns

Nothing.

Requires

Nothing.

Example
MM_Init()             ' Initializes memory manager
Notes

None.

GetMem

Prototype

sub procedure GetMem(dim byref P as ^byte, dim Size as word)

Description

Allocates a block of memory from the memory Heap.

Parameters
  • P: pointer to the allocated memory block.
  • Size: Size of the memory block to be allocated.
Returns

Returns a pointer to the fetched memory (of "Size" bytes) in P, if success; Otherwise 0 (no free blocks of memory are large enough).

Requires

Nothing.

Example
GetMem(ptr,20*sizeof(PBuffer))  ' ptr will point to a memory block where PBuffer is allocated
Notes

None.

Malloc

Prototype

sub function Malloc(dim Size as word) as ^byte

Description

Allocates a block of memory from the memory Heap, returning a pointer to the beginning of the block. The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.

Parameters
  • Size: Size of the memory block to be allocated.
Returns

Returns a pointer to the memory block allocated by the function. If the function failed to allocate the requested block of memory, a zero is returned

Requires

Nothing.

Example
dim p as ^longword      ' pointer to longword
dim a as longword[100]  ' array of longwords

p = longword(Malloc(sizeof(a)))  ' p will point to a memory block where the array is allocated
Notes

None.

FreeMem

Prototype

sub procedure FreeMem(dim byref P as ^byte, dim Size as word)

Description

This function is used to free memory block allocated by GetMem or Malloc.

Parameters
  • P: variable of any pointer type previously assigned by the GetMem procedure.
  • Size: specifies the size in bytes of the dynamic variable to dispose of and should be the same as the one used to GetMem.
Returns

Nothing.

Requires

Nothing.

Example
FreeMem(ptr,20*sizeof(PBuffer))  ' ptr will point to a memory block where PBuffer is allocated
Notes

None.

Free

Prototype

sub procedure Free(dim byref P as ^byte, dim Size as word)

Description

This function is used to free memory block allocated by GetMem or Malloc.

Parameters
  • P: pointer to the memory block
  • Size: actual size of the memory block.
Returns

Nothing.

Requires

Nothing.

Example
dim p as ^longword      ' pointer to longword
dim a as longword[100]  ' array of longwords

p = longword(Malloc(sizeof(a)))  ' p will point to a memory block where the array is allocated
Free(p, sizeof(p))             ' frees memory block from the Heap allocated by Malloc, pointed to by the p pointer
Notes

None.

MM_LargestFreeMemBlock

Prototype

sub function MM_LargestFreeMemBlock() as word

Description

This function is used to determine largest available free memory of contiguous memory on the heap.

Parameters

None.

Returns

Returns, after defragmentation of the freelist the size (in bytes) of the largest free block of contiguous memory on the heap.

Requires

Nothing.

Example
dim block as word      
...
block = MM_LargestFreeMemBlock()
Notes

None.

MM_TotalFreeMemSize

Prototype

sub function MM_TotalFreeMemSize() as word

Description

This function is used to determine total free memory size on the heap.

Parameters

None.

Returns

Returns the size (in bytes) of the total free memory on the heap.

Requires

Nothing.

Example
dim total as word      
...
total = MM_TotalFreeMemSize()
Notes

None.

Copyright (c) 2002-2012 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code