mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 22:59:51 +02:00
* more moderate growing for large collections, Mantis #34420.
git-svn-id: trunk@40214 -
This commit is contained in:
parent
a1904a055c
commit
cf4496aa1e
packages/fcl-stl/src
@ -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 DataSize<cSizeSmall then
|
||||
FCapacity:=FCapacity*2
|
||||
else
|
||||
if DataSize<cSizeBig then
|
||||
FCapacity:=FCapacity+FCapacity div 8
|
||||
else
|
||||
FCapacity:=FCapacity+FCapacity div 16;
|
||||
|
||||
SetLength(FData, FCapacity);
|
||||
if (FStart>0) then
|
||||
for i:=0 to FStart-1 do
|
||||
|
@ -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<cSizeSmall then
|
||||
FCapacity:=FCapacity*2
|
||||
else
|
||||
if DataSize<cSizeBig then
|
||||
FCapacity:=FCapacity+FCapacity div 8
|
||||
else
|
||||
FCapacity:=FCapacity+FCapacity div 16;
|
||||
SetLength(FData, FCapacity);
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user