Сколько элементов влезет в TList

Каждый элемент - указатель. Четыре байта. Процесс может адресовать до 2Гб. 

Можно было бы ожидать, что в TList поместится с полмиллиада элементов, прежде чем память закончится.

Проверяем:

program Test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.Classes,
  System.SysUtils,
  System.Diagnostics;

const
  cTestSize  = 1000000000;

procedure MaxElement;
var
  i : Integer;

begin
  i := 0;
  list := TList.Create;
  Try
    while i < cTestSize do
    begin
      list.Add(nil);
      inc(i);
    end;
  Finally
    WriteLn(Format('Added : %1.0n', [0.0+i]));
    WriteLn(Format('Size  : %1.3n MBytes', [i*SizeOf(list.Items[0])/1024/1024]));
    list.Free;
  End;
end;

begin
  try
    MaxElement;
  except
    on e: exception do
      writeln(e.Message);
  end;
  writeln('I''m finished.');
  readln;
end.

Получаем:

Added : 289 632 570
Size  : 1 104.861 MBytes
Out of memory
I'm finished.

Хм... В реальности, удаётся только перевалить за  один Гб...