'Return the memory objects overlapping with the provided slice.
:param start: the start address
:param end: the end address (non-inclusive)
:returns: tuples of (starting_addr, memory_object)'

def load_slice(self, state, start, end):

    items = list(self._storage.item_slice(start, end))
    if ((not items) or (items[0][0] != start)):
        try:
            (_, floor_mo) = self._storage.floor_item(start)
            if floor_mo.includes(start):
                items.insert(0, (start, floor_mo))
        except KeyError:
            pass
    return items
