我在一個2.5GB的文件中迭代超過80米行來創建每行起始位置的偏移量列表。內存緩慢增加,直到我打到40米左右,然後在3-5秒內迅速增加1.5GB,然後由於內存不足而退出。當數字大於Python的sys.maxint時,它們是否需要更多內存?
經過一番調查後,我發現爆炸發生在當前偏移量(curr_offset)大約爲2b的時候,恰好在我的sys.maxint(2^31-1)附近。
我的問題是:
- 待辦事項數大於所有的sys.maxint基本上需要更多的內存來存儲?如果是這樣,爲什麼?如果沒有,爲什麼我會看到這種行爲?
- 什麼因素(例如哪個Python,哪個操作系統)決定了sys.maxint?
- 在我使用64位Python的2010 MacBook Pro上,sys.maxint是2^63-1。
- 在我使用64位IronPython的Windows 7筆記本電腦上,sys.maxint是較小的2^31-1。與32位Python相同。由於各種原因,我現在無法在Windows計算機上獲得64位Python。
- 有沒有更好的方法來創建這個偏移量列表?
有問題的代碼:
f = open('some_file', 'rb')
curr_offset = 0
offsets = []
for line in f:
offsets.append(curr_offset)
curr_offset += len(line)
f.close()
這是關於'梅森素'嗎? –
我並不確定內部是如何工作的,但大於'sys.maxint'的數字會自動存儲爲'long'(理論上)允許數字爲無限數字。那些自動增長的大小,他們似乎是足夠高效的,在Python 3舊'int'被刪除,所有ints變成多頭。 – poke
你確定這是因爲'curr_offset'的大小嗎?對我來說,看起來'偏移量'列表的大小似乎以4000萬個元素滿足了你機器的物理RAM限制。你有多少RAM,以及該程序在那個時候使用了多少? – poke