code: def _malloc(self, size):
      # returns a large enough block -- it might be much larger
      i = bisect.bisect_left(self._lengths, size)
      if i == len(self._lengths):
          return self._new_arena(size)
      else:
          length = self._lengths[i]
          seq = self._len_to_seq[length]
          block = seq.pop()
          if not seq:
              del self._len_to_seq[length], self._lengths[i]
  
      (arena, start, stop) = block
      del self._start_to_block[(arena, start)]
      del self._stop_to_block[(arena, stop)]
      return block
  
imports: import bisect
  from collections import defaultdict
  import mmap
  import os
  import sys
  import tempfile
  import threading
  from .context import reduction, assert_spawning
  from .None import util
label_desc: Use image node_id 5 for calling the Heap obj's underlying member method code with example usage: obj._malloc(size) and returns: block, self