struct HeapMemMP_ExtendedStats |
|
Stats structure for the getExtendedStats API
typedef struct HeapMemMP_ExtendedStats {
Ptr buf;
SizeT size;
} HeapMemMP_ExtendedStats;
FIELDS
buf
Local address of the shared buffer
This may be different from the original buf
parameter due to alignment requirements.
size
Size of the shared buffer.
This may be different from the original size
parameter due to alignment requirements.
config HeapMemMP_A_align // module-wide |
|
Assert raised when the requested alignment is not a power of 2
config HeapMemMP_A_heapSize // module-wide |
|
Assert raised when the requested heap size is too small
config HeapMemMP_A_invalidFree // module-wide |
|
Assert raised when the free detects that an invalid addr or size
extern const Assert_Id HeapMemMP_A_invalidFree;
DETAILS
This could arise when multiple frees are done on the same buffer or
if corruption occurred.
This also could occur when an alloc is made with size N and the
free for this buffer specifies size M where M > N. Note: not every
case is detectable.
This assert can also be caused when passing an invalid addr to free
or if the size is causing the end of the buffer to be
out of the expected range.
config HeapMemMP_A_zeroBlock // module-wide |
|
Assert raised when a block of size 0 is requested
extern const Assert_Id HeapMemMP_A_zeroBlock;
config HeapMemMP_E_memory // module-wide |
|
Raised when requested size exceeds largest free block
extern const Error_Id HeapMemMP_E_memory;
config HeapMemMP_maxNameLen // module-wide |
|
Maximum length for heap names
extern const UInt HeapMemMP_maxNameLen;
Module-Wide Built-Ins |
|
// Get this module's unique id
Bool HeapMemMP_Module_startupDone();
// Test if this module has completed startup
// The heap from which this module allocates memory
Bool HeapMemMP_Module_hasMask();
// Test whether this module has a diagnostics mask
Bits16 HeapMemMP_Module_getMask();
// Returns the diagnostics mask for this module
Void HeapMemMP_Module_setMask(Bits16 mask);
// Set the diagnostics mask for this module
Instance Object Types |
|
typedef struct HeapMemMP_Object HeapMemMP_Object;
// Opaque internal representation of an instance object
// Client reference to an instance object
typedef struct HeapMemMP_Struct HeapMemMP_Struct;
// Opaque client structure large enough to hold an instance object
// Convert this instance structure pointer into an instance handle
// Convert this instance handle into an instance structure pointer
Instance Config Parameters |
|
typedef struct HeapMemMP_Params {
// Instance config-params structure
// Common per-instance configs
// GateMP used for critical region management of the shared memory
String name;
// Name of this instance
UInt16 regionId;
// Shared region ID
SizeT sharedBufSize;
} HeapMemMP_Params;
// Initialize this config-params structure with supplier-specified defaults before instance creation
config HeapMemMP_gate // instance |
|
GateMP used for critical region management of the shared memory
DETAILS
Using the default value of NULL will result in use of the GateMP
system gate for context protection.
config HeapMemMP_name // instance |
|
Name of this instance
DETAILS
The name (if not NULL) must be unique among all HeapMemMP
instances in the entire system. When creating a new
heap, it is necessary to supply an instance name.
config HeapMemMP_regionId // instance |
|
Shared region ID
DETAILS
The index corresponding to the shared region from which shared memory
will be allocated.
config HeapMemMP_sharedBufSize // instance |
|
Size of sharedBuf
DETAILS
This is the size of the buffer to be used in the HeapMemMP instance.
The actual buffer size in the created instance might actually be less
than the value supplied in 'sharedBufSize' because of alignment
constraints.
It is important to note that the total amount of shared memory required
for a HeapMemMP instance will be greater than the size supplied here.
Additional space will be consumed by shared instance attributes and
alignment-related padding. Use the
sharedMemReq or the
sharedMemReqMeta call to determine the exact amount of shared
memory required for an instance for a given sharedBufSize and cache
settings.
Instance Creation |
|
// Allocate and initialize a new instance object and return its handle
// Initialize a new instance object inside the provided structure
ARGUMENTS
params
per-instance config params, or NULL to select default values (target-domain only)
eb
active error-handling block, or NULL to select default policy (target-domain only)
DETAILS
See specific IHeap implementation for parameters used.
Instance Deletion |
|
// Finalize and free this previously allocated instance object, setting the referenced handle to NULL
// Finalize the instance object inside the provided structure
HeapMemMP_alloc() // instance |
|
Allocates a block of memory from the heap
ARGUMENTS
handle
handle of a previously-created HeapMemMP instance object
size
size (in MADUs) of the block
align
alignment (in MADUs) of the block
eb
pointer to error block
DETAILS
This method returns a block of memory from the heap.
It is called by the
xdc.runtime.Memory.alloc() function.
RETURNS
Returns the address of the allocated memory.
HeapMemMP_free() // instance |
|
Free a block of memory back to the heap
ARGUMENTS
handle
handle of a previously-created HeapMemMP instance object
block
non-NULL address of allocated block to free
size
size (in MADUs) of the block of memory to free
DETAILS
This method gives back a block of memory to a heap.
It is called by the
xdc.runtime.Memory.free() function.
HeapMemMP_getStats() // instance |
|
Retrieve the statistics from the heap
ARGUMENTS
handle
handle of a previously-created HeapMemMP instance object
stats
non-NULL pointer to an output buffer
DETAILS
The caller passes in a pointer to a
xdc.runtime.Memory.Stats
structure and
getStats fills in this structure.
This function is called by the
xdc.runtime.Memory.getStats()
function.
The returned totalSize reflects the usable size of the buffer, not
necessarily the size specified during create.
HEAPMEMMP
getStats() will lock the heap using the HeapMemMP Gate while it retrieves
the HeapMemMP's statistics.
HeapMemMP_isBlocking() // instance |
|
Returns whether the heap may block during an alloc() or
free()
ARGUMENTS
handle
handle of a previously-created HeapMemMP instance object
RETURNS
If the heap might block, TRUE is returned.
If the heap does not block, FALSE is returned.
Instance Convertors |
|
// unconditionally move one level up the inheritance hierarchy
// conditionally move one level down the inheritance hierarchy; NULL upon failure
Instance Built-Ins |
|
Int HeapMemMP_Object_count();
// The number of statically-created instance objects
// The handle of the i-th statically-created instance object (array == NULL)
// The handle of the first dynamically-created instance object, or NULL
// The handle of the next dynamically-created instance object, or NULL
// The heap used to allocate dynamically-created instance objects
// The label associated with this instance object
// The name of this instance object
struct HeapMemMP.ExtendedStats |
|
Stats structure for the getExtendedStats API
XDCscript usage |
meta-domain |
var obj = new HeapMemMP.ExtendedStats;
obj.buf = Ptr ...
obj.size = SizeT ...
FIELDS
buf
Local address of the shared buffer
This may be different from the original buf
parameter due to alignment requirements.
size
Size of the shared buffer.
This may be different from the original size
parameter due to alignment requirements.
C SYNOPSIS
config HeapMemMP.A_align // module-wide |
|
Assert raised when the requested alignment is not a power of 2
XDCscript usage |
meta-domain |
msg: "A_align: Requested align is not a power of 2"
};
C SYNOPSIS
config HeapMemMP.A_heapSize // module-wide |
|
Assert raised when the requested heap size is too small
XDCscript usage |
meta-domain |
msg: "A_heapSize: Requested heap size is too small"
};
C SYNOPSIS
config HeapMemMP.A_invalidFree // module-wide |
|
Assert raised when the free detects that an invalid addr or size
XDCscript usage |
meta-domain |
msg: "A_invalidFree: Invalid free"
};
DETAILS
This could arise when multiple frees are done on the same buffer or
if corruption occurred.
This also could occur when an alloc is made with size N and the
free for this buffer specifies size M where M > N. Note: not every
case is detectable.
This assert can also be caused when passing an invalid addr to free
or if the size is causing the end of the buffer to be
out of the expected range.
C SYNOPSIS
config HeapMemMP.A_zeroBlock // module-wide |
|
Assert raised when a block of size 0 is requested
XDCscript usage |
meta-domain |
msg: "A_zeroBlock: Cannot allocate size 0"
};
C SYNOPSIS
config HeapMemMP.E_memory // module-wide |
|
Raised when requested size exceeds largest free block
XDCscript usage |
meta-domain |
msg: "E_memory: Out of memory: handle=0x%x, size=%u"
};
C SYNOPSIS
config HeapMemMP.maxNameLen // module-wide |
|
Maximum length for heap names
XDCscript usage |
meta-domain |
HeapMemMP.maxNameLen = UInt 32;
C SYNOPSIS
metaonly config HeapMemMP.common$ // module-wide |
|
Common module configuration parameters
XDCscript usage |
meta-domain |
DETAILS
All modules have this configuration parameter. Its name
contains the '$' character to ensure it does not conflict with
configuration parameters declared by the module. This allows
new configuration parameters to be added in the future without
any chance of breaking existing modules.
metaonly config HeapMemMP.maxRuntimeEntries // module-wide |
|
Maximum runtime entries
XDCscript usage |
meta-domain |
DETAILS
Maximum number of HeapMemMP's that can be dynamically created and
added to the NameServer.
To minimize the amount of runtime allocation, this parameter allows
the pre-allocation of memory for the HeapMemMP's NameServer table.
The default is to allow growth (i.e. memory allocation when
creating a new instance).
metaonly config HeapMemMP.tableSection // module-wide |
|
Section name is used to place the names table
XDCscript usage |
meta-domain |
HeapMemMP.tableSection = String null;
DETAILS
The default value of NULL implies that no explicit placement is
performed.
Instance Config Parameters |
|
XDCscript usage |
meta-domain |
var params = new HeapMemMP.Params;
// Instance config-params object
// GateMP used for critical region management of the shared memory
params.name = String null;
// Name of this instance
params.regionId = UInt16 0;
// Shared region ID
params.sharedBufSize = SizeT 0;
config HeapMemMP.gate // instance |
|
GateMP used for critical region management of the shared memory
XDCscript usage |
meta-domain |
var params = new HeapMemMP.Params;
...
DETAILS
Using the default value of NULL will result in use of the GateMP
system gate for context protection.
C SYNOPSIS
config HeapMemMP.name // instance |
|
Name of this instance
XDCscript usage |
meta-domain |
var params = new HeapMemMP.Params;
...
params.name = String null;
DETAILS
The name (if not NULL) must be unique among all HeapMemMP
instances in the entire system. When creating a new
heap, it is necessary to supply an instance name.
C SYNOPSIS
config HeapMemMP.regionId // instance |
|
Shared region ID
XDCscript usage |
meta-domain |
var params = new HeapMemMP.Params;
...
params.regionId = UInt16 0;
DETAILS
The index corresponding to the shared region from which shared memory
will be allocated.
C SYNOPSIS
config HeapMemMP.sharedBufSize // instance |
|
Size of sharedBuf
XDCscript usage |
meta-domain |
var params = new HeapMemMP.Params;
...
params.sharedBufSize = SizeT 0;
DETAILS
This is the size of the buffer to be used in the HeapMemMP instance.
The actual buffer size in the created instance might actually be less
than the value supplied in 'sharedBufSize' because of alignment
constraints.
It is important to note that the total amount of shared memory required
for a HeapMemMP instance will be greater than the size supplied here.
Additional space will be consumed by shared instance attributes and
alignment-related padding. Use the
sharedMemReq or the
sharedMemReqMeta call to determine the exact amount of shared
memory required for an instance for a given sharedBufSize and cache
settings.
C SYNOPSIS
Instance Creation |
|
XDCscript usage |
meta-domain |
var params =
new HeapMemMP.
Params;
// Allocate instance config-params
params.config = ...
// Assign individual configs
var inst = HeapMemMP.create(params);
// Create an instance-object
ARGUMENTS
params
per-instance config params, or NULL to select default values (target-domain only)
eb
active error-handling block, or NULL to select default policy (target-domain only)
DETAILS
See specific IHeap implementation for parameters used.