.. index::
   pair: ANSI fake VM; design

.. _design-vman:


ANSI fake VM
============

.. mps:prefix:: design.mps.vman


:mps:tag:`intro` The ANSI fake VM is an implementation of the MPS VM
interface (see `design.mps.vm`_) using only services provided by the
ANSI C Library (standard.ansic.7).

.. _design.mps.vm: vm

:mps:tag:`page.size` The VM uses a fake page size, given by the constant
:c:macro:`VMAN_PAGE_SIZE` in ``config.h``.

:mps:tag:`align` The VM is aligned to the arena grain size by adding the
grain size to the requested size, allocating a block that large using
:c:func:`malloc()`, then rounding the pointer to the block up to a multiple
of the grain size and storing the result in ``vm->base``. The block is
stored in ``vm->block``, which is passed to :c:func:`free()` in
:c:func:`VMFinish()`.