Handler for any libc `free` SimProcedure call. If the heap has faithful support for `free`, it ought to be
        implemented in a `free` function (as opposed to the `_free` function).

        :param ptr: the location in memory to be freed

def _free(self, ptr):
        """
        Handler for any libc `free` SimProcedure call. If the heap has faithful support for `free`, it ought to be
        implemented in a `free` function (as opposed to the `_free` function).

        :param ptr: the location in memory to be freed
        """
        raise NotImplementedError("%s not implemented for %s" % (self._free.__func__.__name__,
                                                                 self.__class__.__name__))