3 回答

TA貢獻1805條經驗 獲得超9個贊
您可以將緩沖區視為一個隊列,您可以在其中將事物排成一行。每個人都只是一個接一個地排成一排,非常高效,并且不會占用額外的空間來添加新項目。您只需插入它們即可完成。
因此,當您將 A、B、C、D、E 添加到緩沖區時,操作看起來有點像這樣的內存明智:
buffer=A
buffer=A|B
buffer=A|B|C
buffer=A|B|C|D
buffer=A|B|C|D|E
現在,如果您連接字符串,則必須分配和重新分配大量內存
str=''
str=Allocate(A),allocate(str+A),deallocate(str='')
str=Allocate(B),allocate(str(''|A)+B),deallocate(str=''|A)
str=Allocate(C),allocate(str(''|A|B)+C),deallocate(str=''|A|B)
str=Allocate(D),allocate(str(''|A|B|C)+D),deallocate(str=''|A|B|C)
str=Allocate(E),allocate(str(''|A|B|C|D)+E),deallocate(str=''|A|B|C|D)
如您所見,通過不斷向字符串添加一個由舊字符串組成的新字符串,然后創建新字符串并釋放舊字符串。
這會導致大量垃圾內存。當您添加緩沖區時,您只需將所有內容整齊地排列起來,而不會占用太多額外的內存。
雖然如果您連接字符串,您會不斷分配更新和更大的變量。舊字符串 + 追加字符串 + 新連接字符串。這不斷增長,不斷增長,不斷增長。
如果你有一個大文件,你逐行讀取,這可能會在一段時間后出現一些內存不足的錯誤。
- 3 回答
- 0 關注
- 241 瀏覽
添加回答
舉報