Skip to main content
Skip table of contents

Memory handling functions

This page applies to Harlequin v13.1r0 and later; and to Harlequin MultiRIP but not Harlequin Core

The PFI provides the following types of functions for handling memory:

Allocating memory

Freeing memory

Allocating memory

The following function should be called to allocate memory:

void* PlgFwMemAlloc(size_t cbSize, uint32 fAllocFlags);

Given a byte count (cbSize) , PlgFwMemAlloc dynamically allocates memory from the RIP's heap storage.

The parameter fAllocFlags contains a set of bit flags which refine the behavior of the function. The defined flags are as follows:


If the allocation fails, return NULL. This flag should always be set.


Initialize allocated memory with zeros.


Leave allocated memory un‐initialized.

If fAllocFlags includes FWMEM_ALLOC_FAIL_NULL , the function will return NULL if the memory allocation fails. All calls to PlgFwMemAlloc should set FWMEM_ALLOC_FAIL_NULL , as no alternative behavior is presently defined.

All calls to PlgFwMemAlloc should also set either PLGFWMEM_INIT_UNSPECIFIED or PLGFWMEM_INIT_ZEROED . These two flags specify whether allocated memory should be initialized by setting all bytes to zero or should be left uninitialized.

For ease of development, a plugin developer can redefine malloc() using the following macro:

    #define malloc(n) \ PlgFwMemAlloc( \
      (size_t)(n), \

Freeing memory

The following function should be called to free memory that has been allocated using PlgFwMemAlloc : void PlgFwMemFree(void *pBlock);

The function should be passed a pointer to memory previously allocated by PlgFwMemAlloc , and will

deallocate that memory and free it back to the RIP's heap. Partial de‐allocations cannot be performed. It is an error to call PlgFwMemFree () with a NULL pointer.

For ease of development, a plugin developer can redefine free() using the following macro:

#define free(p) PlgMemFree(p)

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.