![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Резкое увеличение размера динамического массива [D6, WinXP]
vint45 © (2007-10-11 16:25:00)Здраствуйте!
Есть динамический массив, в который помещаются записи (record) с описанием файлов при сканировании диска. Записи такого вида:
TFile = record
Folder: string;
FullName: string;
Size: int64;
end;
При сканировании всего диска создается довольно большой массив, около 60000 элементов. При этом программа вылетает с ошибкой "Out of memory".
Диспетчер задач показывает, что программа съела около 250 метров. Хотя если подсчитать сколько должен занимать массив (подсчетом длины строк помещаемых в массив + указатели), то получится примерно метров 5.
Замена типа string (AnsiString) на PChar для FullName решает проблемму (диспетчер показывает, что приложение съедает мах 3 метра). Но вопрос остается, почему при работе с AnsiString приложение выделяет так непропорционально память.
Может так диспетчер памяти выделяет блоки с резервироваем пространства, или может я все-таки что-то не так делаю (тогда могу привести весь код)?
Суслик (2007-10-11 16:30:00) [41]вроде все ок, не должно быть такой ошибки.
где-то еще ошибка, или строке несусветной длины.
clickmaker (2007-10-11 16:26:00) [42]а как выделяешь память и как записываешь строки?