Главная страница
    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-1144071534
siv14
2006-04-03 17:38
2006.04.16
Просмотр структурированного файла


3-1140616606
Olle
2006-02-22 16:56
2006.04.16
Ошибка записи


1-1142254492
Nibbler
2006-03-13 15:54
2006.04.16
Работа с содержимым ScrollBox


2-1143489174
EHOT
2006-03-27 23:52
2006.04.16
Media File


4-1138498463
einstein
2006-01-29 04:34
2006.04.16
Функция shellexecute()





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский