Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
m52
Member

Откуда:
Сообщений: 702
Заранее кол-во файлов неизвестно.
Делаю выделение памяти по 1000 элементов, потом незаполненный "хвост" обрезаю.
2 окт 18, 14:16    [21692656]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
delphinotes
Member

Откуда: Санкт-Петербург
Сообщений: 308
wadman,

Зависит от задачи, в некоторых случаях это можно с некоторой погрешностью предсказать без реального перебора данных (в данном случае файловой системы).
Если предсказать в общем случае нельзя - то:
а) AList.Capacity := MaxListSize;
б) DoWork(AList);
в) AList.Capacity := AList.Count;
2 окт 18, 14:17    [21692660]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
delphinotes
Member

Откуда: Санкт-Петербург
Сообщений: 308
m52,

Лучше использовать геометрическую прогрессию, например тот же TList это делает так:
procedure TList.Grow;
var
  Delta: Integer;
begin
  if FCapacity > 64 then
    Delta := FCapacity div 4
  else
    if FCapacity > 8 then
      Delta := 16
    else
      Delta := 4;
  SetCapacity(FCapacity + Delta);
end;
2 окт 18, 14:20    [21692671]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
MBo
Member

Откуда:
Сообщений: 64
YuRock,

Было, было такое, я помню регулярные вопросы про Setlength(Arr, N+1) в цикле лет 15 назад.
Понятно, что не все с этим сталкивались.

А FastMM включили в состав Delphi в районе D2006, до этого был http://rsdn.org/article/Delphi/memmanager.xml (FastMM можно было подключить вручную)
2 окт 18, 14:21    [21692676]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 8726
m52,
в общем, поставь какой-нибудь мониторинг памяти вроде VMMap и смотри где у тебя возникает фрагментация. Шаманить с кодом не зная деталей обычно бесполезно.
2 окт 18, 14:37    [21692713]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
m52
Member

Откуда:
Сообщений: 702
Спасибо за советы и обсуждения.
Буду пробовать, экспериментировать.
2 окт 18, 14:45    [21692726]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
Василий 2
Member

Откуда:
Сообщений: 309
А в чем вообще загадка-то? 32-разрядная прога, 2 Гб лимит по общему потреблению. 2 млн записей по 1000 байт - и привет.
8 окт 18, 17:10    [21698418]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
m52
Member

Откуда:
Сообщений: 702
Здравствуйте,

Вся соль в том, что я использую динамические массивы для хранения указателей и в один прекрасный момент в куче не может найтись цельного (непрерывного) куска памяти для хранения например 2 млн указателей. Поэтому ищу способ выделения памяти не цельным куском, тогда уменьшится вероятность Out of memory. Задача именно уменьшить вероятность, а не полностью избавиться от этой ошибки.
8 окт 18, 18:00    [21698459]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

08.10.2018 18:00, m52 пишет:
> для хранения например 2 млн указателей.

крассаучег! (С)

Posted via ActualForum NNTP Server 1.5

8 окт 18, 18:02    [21698462]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
MBo
Member

Откуда:
Сообщений: 64
m52,

Вся соль в том, что пример 21692228 показывает, что динамический массив увеличивает свою длину 63 миллиона раз вплоть до размера в гигабайт, и это работает.

Поэтому ещё раз рекомендую показать свой драгоценный код (минимальный воспроизводимый)
8 окт 18, 19:33    [21698582]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
Василий 2
Member

Откуда:
Сообщений: 309
m52
Здравствуйте,

Вся соль в том, что я использую динамические массивы для хранения указателей и в один прекрасный момент в куче не может найтись цельного (непрерывного) куска памяти для хранения например 2 млн указателей. Поэтому ищу способ выделения памяти не цельным куском, тогда уменьшится вероятность Out of memory. Задача именно уменьшить вероятность, а не полностью избавиться от этой ошибки.

А откуда ты знаешь, что OOM именно от нехватки цельного куска размером 2М*4б = 8Мб? Попробуй не выделять память под записи, а просто добавлять в массив нулевые указатели.
9 окт 18, 09:44    [21698910]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3631
m52,

А винда не 32-битная ли случайно? Если да - то сколько суммарно памяти свободной остается для всех прог? Может, её кто-то съел уже всю.
9 окт 18, 11:56    [21699082]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

09.10.2018 11:56, YuRock пишет:
>
> А винда не 32-битная ли случайно?
> Если да - то сколько суммарно памяти свободной остается для всех прог?

не имеет значения.
если конечно поциент не выключил своп.

Posted via ActualForum NNTP Server 1.5

9 окт 18, 12:02    [21699089]     Ответить | Цитировать Сообщить модератору
 Re: Динамические массивы - вопрос выделения памяти. Out of memory  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3631
Мимопроходящий
09.10.2018 11:56, YuRock пишет:
>
> А винда не 32-битная ли случайно?
> Если да - то сколько суммарно памяти свободной остается для всех прог?

не имеет значения.
если конечно поциент не выключил своп.
А, ну да.
9 окт 18, 13:28    [21699209]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить