define: DUK_USE_HEAPPTR16
introduced: 1.1.0
conflicts:
  - DUK_USE_DEBUG
related:
  - DUK_USE_HEAPPTR_ENC16
  - DUK_USE_HEAPPTR_DEC16
default: false
tags:
  - lowmemory
  - experimental
description: >
  Enable "compression" of Duktape heap pointers into an unsigned 16-bit value.
  Use together with DUK_USE_HEAPPTR_ENC16 and DUK_USE_HEAPPTR_DEC16.

  Pointers compressed are those allocated from Duktape heap, using the user
  provided allocation functions.  Also NULL pointer must encode and decode
  correctly.

  Currently it is required that NULL encodes to integer 0, and integer
  0 decodes to NULL.  No other pointer can be encoded to 0.

  This option reduces memory usage by several kilobytes, but has several
  downsides.  It can only be applied when Duktape heap is limited in size,
  for instance, with 4-byte aligned allocations a 256kB heap (minus one value
  for NULL) can be supported.  Pointer encoding and decoding may be relatively
  complicated as they need to correctly handle NULL pointers and
  non-continuous memory maps used by some targets.  The macro may need to call
  out to a helper function in practice, which is much slower than an inline
  implementation.

  Current limitation:  Duktape internal debug code enabled with e.g.
  DUK_USE_DEBUG and DUK_USE_DEBUG_LEVEL=0 doesn't have enough plumbing to be
  able to decode pointers.  Debug printing cannot currently be enabled when
  pointer compression is active.
