Re: [問題] 請問為何我這程式會吃掉過多記憶體?
※ 引述《Kuster (克斯特)》之銘言:
: 大家好,想請教一個問題,我這段程式為何會在執行的時候
: 隨著執行過程記憶體不斷消耗掉?
: index = [None] * 4896990
: data = [None] * 71242183
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^我先宣告固定大小的List
: 這時候記憶體大約吃了500MB
: print raw_input('ok1:')
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^我程式在這邊暫停,我確定到此記憶體只吃500MB
: current = 1
: index[0] = 0
: for line in open('SLo.txt'):
: line = line.rstrip()
: data1 = [int(i) for i in line.split()]
: l = len(data1) - 1
: index[current] = index[current-1] + l
: data[index[current-1]:index[current]] = data1[1:]
: current +=1
: 接著在跑迴圈的時候記憶體不斷消耗,程式執行過程中多吃掉了1G以上
: 我的SLo.txt這檔案相當大是沒錯,可是使用for迴圈來直接讀取檔案
: 會循序讀取檔案,並不會將檔案內容直接載入到記憶體阿?
: 接著我直接指定一段data的範圍,將data1的內容直接覆蓋過去
: 這樣也不會消耗掉記憶體阿?
: 請問到底是哪個部份在消耗記憶體呢?
: 謝謝各位前輩!!
一個 list cell 佔用 4 bytes 是用來存放 reference/pointer/address value
index = [None] * 4896990
index 指涉的 list object 至少會佔用 4 * 4896990 bytes。
而
index[0] = 5
此 statement 並不是把數值 5 寫進 index[0],是產生一個值為 5 的 int
object(如果有需要),把該 object 的 addess/reference 寫進 index[0]。
也就是說如果程式一開始建立一個 list object:
a = [None] * 1024
這個 list object 至少佔 4k bytes,
for x in xrange(len(a)):
a[x] = int(x)
會再用掉至少 4k bytes(假設一個 int object 成本至少 4 bytes) for 1024
個 int object。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.129.8
※ 編輯: sbrhsieh 來自: 218.173.130.149 (02/08 02:33)
推
02/08 03:12, , 1F
02/08 03:12, 1F
→
02/08 08:10, , 2F
02/08 08:10, 2F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章