MemAlloc Function | |
Allocate a static memory buffer of a specified size.
Namespace:
XSharp.RT
Assembly:
XSharp.RT (in XSharp.RT.dll) Version: 2.19
Syntax FUNCTION MemAlloc(
wBytes AS DWORD
) AS IntPtr
public static IntPtr MemAlloc(
uint wBytes
)
Request Example
View SourceParameters
- wBytes
- Type: DWord
The number of bytes to allocate.
Return Value
Type:
IntPtr
A pointer to the allocated space if there is sufficient memory available; otherwise, it returns a NULL_PTR. You should always check the return value for a successful allocation.
Remarks
MemAlloc() allocates a memory buffer of at least
wBytes.
The allocated memory is defined to be static so it is not moved by the garbage collector. Since memory is allocated in increments of 32 bytes, some extra space may be allocated.
For example, a request for even 1 byte will allocate 32 bytes. Space allocated by MemAlloc() is freed by MemFree().
Tip |
---|
This function allows the direct manipulation of a memory location and should be used with extreme care.
|
Remarks Tip |
---|
The Static Memory Functions (MemAlloc, MemSet etc) are included for compatibility only.
In most cases the static memory blocks can (and should) be replaced with arrays of bytes.
Many of the functions in the runtime that take memory blocks as parameter,
such as the low level IO functions, now have overloads that take arrays of bytes as parameter.
We recommend that you use these overloads, because their performance is somewhat better.
|
Examples
This example uses MemAlloc() to see whether a specified block is available:
1FUNCTION IsAvailable(wRequest AS DWORD) AS LOGIC
2 LOCAL ptrBuff AS PTR
3 LOCAL lAvailable AS LOGIC
4 ptrBuff := MemAlloc(wRequest)
5 IF ptrBuff = NULL_PTR
6 ? "Memory allocation has failed"
7 lAvailable := FALSE
8 ELSE
9 lAvailable := TRUE
10 MemFree(ptrBuff)
11 ENDIF
12 RETURN lAvailable
See Also