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 关注
- 213 浏览
添加回答
举报