![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Код:
procedure TForm1.Button1Click(Sender: TObject); var list: TStringList; i: Integer; str,str2: string; begin button1.Caption:='Start'; list:= TStringList.Create; list.clear; str:=''; for i:=0 to 200 do str:=str+IntToStr(i); //длина строки 493 символа. for i:=0 to 10000000 do begin list.Add(str); end; button1.Caption:='End'; list.Free; end; lmikle: пользуемся тегами!!! Так все работает отлично. Память сильно не расходуется. но если заменить строку list.Add(str); на list.Add(str + '1'); или str2:=str + '1'; list.Add(str2); то приложение вылетает с руганью на окончание памяти. А если так сделать str2:=str; list.Add(str2); то тоже никаких проблем с памятью win7 delphi 7 ram 8gb Последний раз редактировалось lmikle, 23.09.2012 в 08:42. |
|
#2
|
||||
|
||||
|
Вот смотри: ты добавляешь строку размером 493 символа (493 байта) 10000000 раз = 4930000000 байта пр. равн. 10 мб. А вот если ты еще каждый раз прибавишь по '1' в конец каждой строки, то размер будет
4930000000+10000000^2-(10000000^2-10000000)/2; Дальше считай сам ![]() |
|
#3
|
|||
|
|||
|
Цитата:
![]() |
|
#4
|
||||
|
||||
|
Цитата:
Пример: Код:
str := StringOfChar('X', 1024 * 1024); // Создаём новую строку str размером в мегабайт
str2 := str + '1'; // Создаём новую строку str2 и копируем в неё содержимое str плюс сивол '1'
for i := 1 to 1000000 do
begin
list.Add(str2); // В список list добавляется миллион раз ссылка на строку str2
end;Другой пример: Код:
str := StringOfChar('X', 1024 * 1024); // Создаём новую строку str размером в мегабайт
for i := 1 to 1000000 do
begin
str2 := str + '1'; // Создаём новую строку str2 и копируем в неё содержимое str плюс сивол '1'
list.Add(str2); // В список list добавляется миллион раз ссылка на строку str2
end;![]() |
|
#5
|
|||
|
|||
|
Да, я знаю что 32 бита больше 2 гигов рамы не увидит.
Спасибо. За развернутое пояснение. Как можно избежать перерасхода памяти в моем примере? |
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Создать огромный список неодинаковых строк.
|
|
#8
|
||||
|
||||
|
Цитата:
|