[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
_xvheapnew()
Allocate a VM segment for use as a segment heap
------------------------------------------------------------------------------
C Prototype
#include "vm.api"
HANDLE _xvheapnew(
USHORT uiSize
)
Arguments
uiSize is the size of the VM segment to allocate as a segment heap.
Returns
If successful, _xvheapnew() returns a 16-bit segment handle; otherwise,
it returns zero.
Description
_xvheapnew() allocates a VM segment for use as a segment heap.
Warning! You must eventually free a segment allocated by
_xvheapnew() with _xvheapdestroy().
Notes
. Actual heap size: In CA-Clipper, there are two bytes of overhead
for every memory block allocated within the segment heap. Therefore,
you cannot use a segment heap to hold a string that approaches the
CA-Clipper maximum string length (65,519 bytes). In such cases,
you should dedicate an entire VM segment to the string.
. Efficiency: The VMM system is most efficient when managing a small
number of relatively large segments. The segment heap functions
allow a single segment to be treated as a C-style heap (using
_xvheapalloc() and _xvheapfree()), making it possible to store
multiple data items in one segment. This can greatly increase the
overall efficiency of the VMM system.
Examples
. This example creates a segment heap with _xvheapnew() and
allocates a memory block in the segment heap. The block is then
locked and the string is copied into it. Later, the memory block is
unlocked, the memory freed, and the heap destroyed:
// CA-Clipper include files
#include "extend.api"
#include "vm.api"
// Microsoft C include files
#include "string.h"
// Prototype
Boolean VMHeapExample(char * spSrc);
#define HEAP_SIZE 4096
Boolean VMHeapExample(char * spSrc)
{
HANDLE hSegment;
unsigned uiStringOffset;
unsigned uiBufflen;
char * spString;
Boolean bResult = FALSE;
if (hSegment = _xvheapnew(HEAP_SIZE))
{
uiBufflen = strlen(spSrc) + 1;
uiStringOffset = _xvheapalloc(hSegment, uiBufflen);
if (uiStringOffset)
{
spString = _xvheaplock(hSegment, uiStringOffset);
if (spString != NULL)
{
strcpy(spString, spSrc);
.
. <statements>
.
bResult = TRUE;
_xvheapunlock(hSegment, uiStringOffset);
}
_xvheapfree(hSegment, uiStringOffset);
}
_xvheapdestroy(hSegment);
}
return (bResult);
}
Files Library is CLIPPER.LIB, header file is Vm.api.
See Also:
_xvheapalloc()
_xvheapdestroy()
_xvheapfree()
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson