Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1143292789
Дмитрий_177
2006-03-25 16:19
2006.04.16
Выравнивание по фотме панелей


4-1138127656
medvedenator
2006-01-24 21:34
2006.04.16
Запуск программы от имени администратора


15-1143203204
ZeFiR
2006-03-24 15:26
2006.04.16
Хостинг с возможностью оплаты Visa Electron...


8-1132134498
sco
2005-11-16 12:48
2006.04.16
Текстура и Освещение OpenGl


2-1143644852
Цукор5
2006-03-29 19:07
2006.04.16
передача параметра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский