mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 02:09:14 +02:00
* more moderate growing for large collections, Mantis #34420.
git-svn-id: trunk@40214 -
This commit is contained in:
parent
a1904a055c
commit
cf4496aa1e
@ -146,13 +146,29 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDeque.IncreaseCapacity;inline;
|
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
|
begin
|
||||||
OldEnd:=FCapacity;
|
OldEnd:=FCapacity;
|
||||||
if(FCapacity=0) then
|
DataSize:=FCapacity*SizeOf(T);
|
||||||
FCapacity:=1
|
if FCapacity=0 then
|
||||||
|
FCapacity:=4
|
||||||
else
|
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);
|
SetLength(FData, FCapacity);
|
||||||
if (FStart>0) then
|
if (FStart>0) then
|
||||||
for i:=0 to FStart-1 do
|
for i:=0 to FStart-1 do
|
||||||
|
@ -157,11 +157,26 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVector.IncreaseCapacity();
|
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
|
begin
|
||||||
|
DataSize:=FCapacity*SizeOf(T);
|
||||||
if FCapacity=0 then
|
if FCapacity=0 then
|
||||||
FCapacity:=1
|
FCapacity:=4
|
||||||
else
|
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);
|
SetLength(FData, FCapacity);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user