Показать сообщение отдельно
  #12  
Старый 12.11.2013, 06:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Как я понимаю, связанный список тут не нужен.
Тогда сегмент будет примерно так:


Код:
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;

Это вариант с пресозданием страниц.
Можно сделать вариант с выделением памяти при первом обращении.
Еще можно сделать в таком случае сборщик памяти, когда занятые куски собираются в начало сегмента.

Вообще, там много можно чего сделать. Фактически, можно написать свой небольшой менеджер памяти.
Ответить с цитированием