[pypy-dev] Fatal RPython error: MemoryError

Roger Flores aidembb at yahoo.com
Tue Aug 7 07:41:05 CEST 2012

I'm still getting MemoryError exceptions in RPython, as I mentioned a few months back.  I only knew of one way to reproduce it back then, but now I'm seeing different ways.  So, inspired, I wrote a short program to quickly exhaust memory in the hopes of reproducing the problem.  It seems to work! Fast!

If you run the code pasted at the bottom with CPython, it should end printing 'test passed'.
If you run the code with pypy 1.9 (I tried Windows), you should get:

RPython traceback:
  File "translator_goal_targetpypystandalone.c", line 1048, in entry_point
  File "interpreter_function.c", line 929, in funccall__star_1
  File "interpreter_function.c", line 958, in funccall__star_1
  File "rpython_memory_gc_minimark.c", line 2518, in MiniMarkGC_collect_and_rese
  File "rpython_memory_gc_minimark.c", line 2220, in MiniMarkGC_minor_collection

  File "rpython_memory_gc_minimark.c", line 4258, in MiniMarkGC_collect_oldrefs_
  File "rpython_memory_gc_base.c", line 1799, in trace___trace_drag_out
  File "rpython_memory_gc_minimark.c", line 6667, in MiniMarkGC__malloc_out_of_n
Fatal RPython error: MemoryError

Can someone else at least confirm this?


-Roger Flores


Code to exhaust memory and generate a MemoryError exception

size = 1

# find the largest memory allocation that succeeds
    while True:
        new_size = size * 2
        d = [0] * size
        size = new_size
except MemoryError as msg:

l = []

# exhaust memory
while True:
        # add the allocations to a list so references to them remain.
        # otherwise the garbage collector will clean them out!
        l.append([0] * size)
        print '{:,}'.format(size)
    except MemoryError as msg:
        if size > 1:
            # can't allocate this much memory anymore.  Try a smaller size
            size = size / 2
            print 'test passed'

More information about the pypy-dev mailing list