Python: Как оценить / рассчитать объем памяти структур данных? - PullRequest
14 голосов
/ 15 апреля 2009

Какой хороший способ оценить объем памяти объекта?

И наоборот, какой хороший способ измерить след?

Например, скажем, у меня есть словарь, значениями которого являются списки целых чисел, числа с плавающей точкой:

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]

У меня есть 4 ГБ физической памяти, и я хотел бы приблизительно определить, сколько строк (ключ: значения) я могу сохранить в памяти перед тем, как перейти к операции подкачки. Это на Linux / Ubuntu 8.04 и OS X 10.5.6.

Кроме того, каков наилучший способ выяснить фактический объем памяти в моей программе? Как мне лучше понять, когда у него истощается физическая память и происходит разлив?

Ответы [ 2 ]

9 голосов
/ 15 апреля 2009

Гуппи имеет хороший профилировщик памяти (Heapy):

>>> from guppy import hpy
>>> hp = hpy()
>>> hp.setrelheap() # ignore all existing objects
>>> d = {}
>>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
>>> hp.heap()
 Partition of a set of 24 objects. Total size = 1464 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      2   8      676  46       676  46 types.FrameType
     1      6  25      220  15       896  61 str
     2      6  25      184  13      1080  74 tuple
 ...

Heapy немного недокументирован, поэтому вам, возможно, придется немного покопаться в веб-странице или исходном коде, но он очень мощный. Есть также статьи , которые могут иметь отношение к делу.

5 голосов
/ 15 апреля 2009

Вы можете сделать это с помощью профилировщика памяти, о котором я знаю пару:

  1. PySizer - возможно устарел, поскольку домашняя страница теперь рекомендует:

  2. бесформенный .

Возможно, это дубликат этого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...