diff --git a/packages/fcl-stl/src/gdeque.pp b/packages/fcl-stl/src/gdeque.pp index 5a50dc4cf1..037ba516c5 100644 --- a/packages/fcl-stl/src/gdeque.pp +++ b/packages/fcl-stl/src/gdeque.pp @@ -146,13 +146,29 @@ begin end; procedure TDeque.IncreaseCapacity;inline; -var i,OldEnd:SizeUInt; +const + // if size is small, multiply by 2; + // if size bigger but <256M, inc by 1/8*size; + // otherwise inc by 1/16*size + cSizeSmall = 1*1024*1024; + cSizeBig = 256*1024*1024; +var + i,OldEnd, + DataSize:SizeUInt; begin OldEnd:=FCapacity; - if(FCapacity=0) then - FCapacity:=1 + DataSize:=FCapacity*SizeOf(T); + if FCapacity=0 then + FCapacity:=4 else - FCapacity:=FCapacity*2; + if DataSize0) then for i:=0 to FStart-1 do diff --git a/packages/fcl-stl/src/gvector.pp b/packages/fcl-stl/src/gvector.pp index 4035d2788a..0b58af79d1 100644 --- a/packages/fcl-stl/src/gvector.pp +++ b/packages/fcl-stl/src/gvector.pp @@ -157,11 +157,26 @@ begin end; procedure TVector.IncreaseCapacity(); +const + // if size is small, multiply by 2; + // if size bigger but <256M, inc by 1/8*size; + // otherwise inc by 1/16*size + cSizeSmall = 1*1024*1024; + cSizeBig = 256*1024*1024; +var + DataSize:SizeUInt; begin + DataSize:=FCapacity*SizeOf(T); if FCapacity=0 then - FCapacity:=1 + FCapacity:=4 else - FCapacity:=FCapacity*2; + if DataSize