Version 3 (modified by 10 years ago) (diff) | ,
---|
The Malloc Library
The malloc.c and malloc.h provide a dynamic memory allocation service.
If the target architecture is clusterized (one physical memory bank per cluster), the application heap is physically distributed, and it can exist one heap(x,y) segment per cluster, and one allocator per cluster.
The distributed heap(x,y) segments must be explicitely defined in the application mapping.
The malloc() and free() functions below have the same semantic as the standard UNIX functions.
cluster selection
Using the (x,y) arguments (as in the remote_malloc() function below), the user application can explicitely select the allocator in cluster(x,y). If these arguments (x,y) are not defined, (as in the malloc() function below), the cluster is implicitely defined by the (x,y) coordinate of the processor running the calling task. If there is no heap(x,y) defined in the selected cluster, or if there is no more space in the selected heap(x,y) segment, a NULL pointer is returned.
alignment
Using the align arguments, the user application can require the selected allocator to return a virtual address aligned on a power of 2 (1 << align). If the align argument value is larger than 31, a NULL pointer is returned.
Available functions
- void * malloc( unsigned int size )
- void * malloc_aligned( unsigned int size, unsigned int align )
- void * remote_malloc( unsigned int size, unsigned int x, unsigned int y )
- void * remote_malloc_aligned( unsigned int size, unsigned int align, unsigned int x, unsigned int y )
- void free( void* ptr )
WARNING
In the present implementation, the free() function cannot be used with the remote_malloc() and remote