Использование памяти Python String во FreeBSD

Я наблюдаю странную схему использования памяти со строками Python на Freebsd. Рассмотреть возможность следующая сессия. Идея состоит в том, чтобы создать список, в котором строк, так что совокупное количество символов в списке составляет 100 МБ.

l = []
for i in xrange(100000):
    l.append(str(i) * (1000/len(str(i))))

При этом используется около 100 МБ памяти, как ожидалось, и 'del l' очистит это.

l = []
for i in xrange(20000):
    l.append(str(i) * (5000/len(str(i))))

Это использует 165 МБ памяти. Я правда не понимаю где дополнительное использование памяти исходит от. [Размер обоих списков одинаков]

Python 2.6.4 на FreeBSD 7.2. В Linux / Windows оба используют около Только 100 МБ памяти.

Обновление: я измеряю память с помощью ps aux. Это можно выполнить с помощью os.sytem после приведенных выше фрагментов кода. Также они выполнялись отдельно.

Обновление 2: Похоже, что freebsd mallocs память кратно 2. Таким образом, выделение 5 КБ фактически выделяет 8 КБ. Хотя я не уверен.

6
задан amit 18 March 2011 в 05:21
поделиться