![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Out of memory while expanding memory stream
NieL © (2011-02-11 18:11:00)изза-чего может возникнуть такая ошибка, памяти хватает
DiamondShark (2011-02-14 12:49:00) [1]MemoryStream -- хороший пример плохой абстракции.
Напишите себе стрим на базе файла с атрибутами FILE_ATTRIBUTE_TEMPORARY
or FILE_FLAG_DELETE_ON_CLOSE
А про MemoryStream забудьте как о страшном сне.
Leonid Troyanovsky (2011-02-12 11:32:00) [2]
> Anatoly Podgoretsky © (12.02.11 10:16) [19]
> > я автора имел в виду, если что
> А я обеих и в первую очередь второго.
И целовался на кухне с обоими.
:)
--
Regards, LVT.
Anatoly Podgoretsky (2011-02-12 10:16:00) [3]
> я автора имел в виду, если что
А я обеих и в первую очередь второго.
Anatoly Podgoretsky (2011-02-12 10:15:00) [4]> Token (11.02.2011 21:35:12) [12]
Ты не спросил, ты пургу несешь
Anatoly Podgoretsky (2011-02-12 10:14:00) [5]> Token (11.02.2011 21:23:08) [8]
А это где делаешь? ---- это не проясняет ситуацию
Anatoly Podgoretsky (2011-02-12 10:13:00) [6]> Palladin (11.02.2011 21:19:07) [7]
Надо - Мамой клянусь
Anatoly Podgoretsky (2011-02-12 10:12:00) [7]> И. Павел (11.02.2011 21:02:04) [4]
А ты знаешь другой варинт, когда сначала удаляется старая память :-)
Token (2011-02-11 21:54:00) [8]Ну на самом деле, я воспользовался случаем для прояснения ) До этого думал что под систему есть 3-ий гиг, и все 2 остальные мои. И как-то не доходило, что все "изолировано" и библиотеки надо отображать в адреса приложения.
Игорь Шевченко (2011-02-11 21:39:00) [9]
> Я не плачусь, я спросил.
я автора имел в виду, если что
Token (2011-02-11 21:35:00) [10]Я не плачусь, я спросил.
Игорь Шевченко (2011-02-11 21:31:00) [11]
> Почему?
потому что дофига. В несчастные доступные 2гб еще надо впихнуть кучу всего - системные DLL, DLL приложения, само приложение, служебные структуры, и т.д.
проще узнать, сколько доступно и исходить из этого, а не желать странного и плакаться по форумам.
Token (2011-02-11 21:28:00) [12]Почему?
Игорь Шевченко (2011-02-11 21:27:00) [13]
> уже не катит
и не покатит
Token (2011-02-11 21:23:00) [14]str:=TMemoryStream.Create;
str.SetSize(1500000000);
----
а вот str.SetSize(1600000000); уже не катит
Palladin (2011-02-11 21:19:00) [15]все разговоры разговариваете, этим долго можно заниматься...
может на конкретику перейдете, станцуете или код покажете, на худой конец...
я вот взял переменную завел глобальненькую
var
a: array of Integer;
кнопочку кинул на формочку написав в onclick
SetLength(a, 1073741824 div 4);
и как то всем всего хватило
так что можете разговоры о теории разговаривать и дальше, но лично я вашему вранью о чистейшей правде и клятвах на святых бананах не поверю
Token (2011-02-11 21:18:00) [16]Уточню - D7
Token (2011-02-11 21:12:00) [17]Именно сразу после создания, устанавливается размер порядка 1Gb. И не хотит... Хотя теоретически принципиальных ограничений я не вижу.
И. Павел (2011-02-11 21:02:00) [18]Не знаю, как экспандится поток, но может быть он сперва выделяет новую память, потом копирует в нее старые данные а затем удаляет старую память? Т.е. когда резервируется новая память, старая может еще не освобождаться. Такой подход, например, может приводить к нехватке памяти при SetLength очень больших массивов, когда памяти еще, казалось бы, хватает.
Token (2011-02-11 20:08:00) [19]А почему она возникает при выделении порядка 1Gb?
Anatoly Podgoretsky (2011-02-11 19:11:00) [20]> Palladin (11.02.2011 18:27:01) [1]
Не хватает, вот он и забыл про это.