Как я понимаю, связанный список тут не нужен.
Тогда сегмент будет примерно так:
Код:
type
TSegment = class(TObject)
private
FPages : Array Of TPage;
function GetCount : Integer;
function GetPage(Index : Integer) : TPage;
public
// конструкторы и деструкторы
constructor Create (ACount: integer); virtual;// инициализация
destructor Destroy; override; // уничтожение
property Count : Integer read GetCount;
property Pages[Index : Integer] : TPage read GetPage;
procedure ClearAll;
end;
...
constructor TSegment.Create(ACount : Integer);
var
I : Integer;
begin
inherited Create;
SetLength(FPages,ACount);
For I := Low(FPages) To High(FPages) Do
FPages[i] := TPages.Create;
end;
destructor TSegment.Destroy;
var
I : Integer;
begin
For I := Low(FPages) To High(FPages) Do
FPages[i].Free;
SetLength(FPages,0);
inherited;
end;
function TSegment.GetCount : Integer;
begin
Result := Length(FPages);
end;
function TSegment.GetPage(Index : Integer) : TPage;
begin
Result := FPages[Index];
end;
procedure TSegment.ClearAll;
var
I : Integer;
begin
For I := Low(FPages) To High(FPages) Do
FPages[i].Clear;
end;
Это вариант с пресозданием страниц.
Можно сделать вариант с выделением памяти при первом обращении.
Еще можно сделать в таком случае сборщик памяти, когда занятые куски собираются в начало сегмента.
Вообще, там много можно чего сделать. Фактически, можно написать свой небольшой менеджер памяти.