考虑到效率,现在的做法是直接用一个大一点的BUF,不够时再增加,你可以看看TLIST等
TStringList是这样分配内存的。
procedure TStringList.Grow;
var
Delta: Integer;
begin
if FCapacity > 64 then
Delta := FCapacity div 4 else
if FCapacity > 8 then
Delta := 16 else
Delta := 4;
SetCapacity(FCapacity + Delta);
end;
procedure TStringList.SetCapacity(NewCapacity: Integer);
begin
ReallocMem(FList, NewCapacity * SizeOf(TStringItem));
FCapacity := NewCapacity;
end;