Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизОсвобождение строк. Найти похожие ветки
← →
Erik1 © (2006-03-29 11:50) [0]Я сделал буфер для потоков который представляет из себя список:
MyBuf = record
Value: String;
_Time: Cardinal;
end;
Создаю record с поможю New освобождаю Dispose.
BufList.Put(Doc.GetLine); //добавляю сторку
BufList.Get(Value); //удаляю строку
Коректно ли удаляется строка(Item.Line) и освобождается память под нее?
Используеме процедуры.
procedure TBufList.Put(const Value: String);
Var
DataBuf: PDataBuf;
begin
FLock.BeginWrite;
try
New(DataBuf);
DataBuf.Line := Value;
DataBuf._Time := DateTimeToTimeStamp(Time).Time;
fData.Add(DataBuf);
finally
FLock.EndWrite;
end;
end;
function TBufList.Get(var Value: String): Boolean;
Var
DataBuf: PDataBuf;
i: Integer;
begin
FLock.BeginWrite;
try
i := Count;
Result := i > 0;
if Result then
begin
Value := Items[i-1].Line;
Delete(i-1);
end;
finally
FLock.EndWrite;
end;
end;
procedure TBufList.Delete(Index: Integer);
Var
Item: PDataBuf;
begin
Item := Items[Index];
SetLength(Item.Line, 0);
FData.Delete(Index);
Dispose(Item);
Item := nil;
end;
← →
MBo © (2006-03-29 12:16) [1]Да, корректно. Dispose вызывает Finalize
← →
Deka © (2006-03-29 12:18) [2]Вроде правильно, только я бы предпочёл вместо SetLenght использовать Finalize.
← →
MBo © (2006-03-29 12:29) [3]не нужно ни SetLength, ни Finalize
← →
Erik1 © (2006-03-29 12:40) [4]Большое спасибо.
По поводу переноса темы:
Вы бы еще ее в раздел для грудничков перенесли! Видать тут все гении и многопоточное прогамирование и внутрений механим менаджера памяти все знают как Отче наш.
← →
Ega23 © (2006-03-29 12:43) [5]Вроде всё нормально. Только лично я бы вместо record завёл бы class.
← →
begin...end © (2006-03-29 12:50) [6]> Erik1 © (29.03.06 12:40) [4]
Извините, но для того, чтобы ответить на Ваш вопрос, вовсе не обязательно досканально представлять себе механизм работы менеджера памяти.
Более того — этот механизм здесь вообще ни при чём. Нужно выяснить, будет ли автоматически финализирована строка или нет. А то, как именно будет освобождена память (а это и есть внутренний механизм), в данном случае неважно.
Достаточно прочитать справку по FreeMem. И, может быть, для уверенности заглянуть в окно CPU.
← →
Erik1 © (2006-03-29 13:02) [7]Странно по тестам 56 байт кудато деваются после каждой обработки.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c