Esa Peuha added the comment:
So best guess is that Microsoft's allocators have gotten fatally fragmented,
but I don't know how to confirm/refute that.
Let's test this in pure C. Compile and run the attached uglyhack.c on win32; if
it reports something significantly less than 100%, it's
STINNER Victor added the comment:
Python uses an allocator called pymalloc. For allocations smaller
than 512 bytes, it uses arenas of 256 KB. If you allocate many small
objects and later release most of them (but not all!), the memory is
fragmented. For allocations larger than 512 bytes, Python
New submission from Пётр Дёмин:
Taken from http://stackoverflow.com/a/19287553/135079
When I consume all memory:
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)]
on win32
Type help, copyright, credits or license for more information.
a = {}
for k in
Changes by Antoine Pitrou pit...@free.fr:
--
nosy: +brian.curtin, tim.golden, tim.peters
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue19246
___
R. David Murray added the comment:
My guess would be you are dealing with memory fragmentation issues, but I'll
let someone more knowledgeable confirm that before closing the issue :)
--
nosy: +r.david.murray
___
Python tracker
Tim Peters added the comment:
Here on 32-bit Windows Vista, with Python 3:
C:\Python33python.exe
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit
(Intel)] on win32
Type help, copyright, credits or license for more information.
a = {}
for k in range(100): a['a'
Antoine Pitrou added the comment:
Works fine on a 32-bit Linux build (64-bit machine, though):
import sys
sys.maxsize
2147483647
a = {}
for k in range(100): a['a' * k] = k
...
Traceback (most recent call last):
File stdin, line 1, in module
MemoryError
del a
a = {}
for k in
STINNER Victor added the comment:
int type of Python 2 uses an internal free list which has an unlimited size.
If once you have 1 million different integers are the same time, the memory
will never be released, even if the container storing all these integers is
removed, because a reference
Tim Peters added the comment:
haypo, there would only be a million ints here even if the loop had completed.
That's trivial in context (maybe 14 MB for the free list in Python 2?). And
note that I did my example run under Python 3.
Besides, the OP and I both reported that Task Manager