Подходящая альтернатива для системы.Классы.Максимальный размер списка

#delphi

Вопрос:

Иногда один использует System.Classes.MaxListSize .

 procedure GList.SetCapacity(NewCapacity: Integer);
begin
  if (NewCapacity < FCount) or (NewCapacity > MaxListSize) then
    Error(string(@SListCapacityError), NewCapacity);
  if NewCapacity <> Capacity then
  begin
    SetLength(FList, NewCapacity);
  end;
end;
 

Но это устарело.

 const
  MaxListSize = MaxInt div 16 deprecated;
 

Я получаю это предупреждение:

FrameworkgenericsшаблоныGList_Implementation.inc(215): предупреждение W1000: Символ «MaxListSize» устарел

Я полагаю, что он устарел для поддержки 64 бит.

Что может быть подходящей альтернативой для System.Classes.MaxListSize того, чтобы поддерживать как 32, так и 64-разрядные версии?

Обновление #1 — 2021-10-06, Когда я сделаю следующее:

 implementation

uses
  System.Generics.Collections;

procedure DoSomething;
var
  il: TList<integer>;
  i: Integer;
begin
  il := TList<integer>.Create;
  try
    for i := 0 to MaxInt do
      il.Add(i);
  finally
    il.Free;
  end;
end;
 

Я получаю исключение из памяти. Больше нет чека, не так ли?

Комментарии:

1. Для собственного кода Delphi он, по-видимому, выполняет работу по проверке SetLength() , и больше нет проверки SetCapacity по максимальному размеру списка. Таким образом, вы можете просто удалить or (NewCapacity > MaxListSize) или обернуть его в условные обозначения компилятора. Обратите внимание, что это довольно старое изменение.

2. Я проверил это с TList<T> помощью . Чека больше нет. Я получаю исключение из памяти.

3. Я получаю исключение из памяти. Больше нет чека, не так ли? Разве исключение памяти (вместо сбоя системы) не указывает на наличие проверки? Фиксированный предел, как и прежде, не имеет смысла в 64-разрядных системах, поскольку ограничивающим фактором является объем памяти.