Форум программистов, компьютерный форум, киберфорум
deathNC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
фсякая инитиресссная фсячина

Заполнение динамического массива именами файлов

Запись от deathNC размещена 15.02.2012 в 02:01
Показов 3371 Комментарии 1

Mawrat:
Подобную работу уже выполняет менеджер памяти Delphi. Если менеджер замечает, что длина периодически возрастает, то он (менеджер памяти) начинает выделять для массива память с запасом. Таким образом, когда в следующий раз происходит выполнение SetLength() с целью увеличить длину, то перераспределения памяти не происходит, а просто справа от массива добавляется нужный блок из сделанного ранее запаса. Поэтому всё и так быстро работает.
Но иногда, при обработке больших объёмов данных метод с приращением на 100 и более элементов ещё более оптимизирует работу. Например, если для массива выделена память на 1 000 000 элементов и этот массив уже заполнен, а требуется добавить ещё один элемент, то стоимость его добавления будет очень высокой. - Менеджер выделит блок памяти нужного размера под новый массив. Этот блок будет взят или из запасов Менеджера или будет запрошен у системы, если таких запасов уже не осталось. Потом произойдёт копирование элементов из прежнего массива в новый массив и плюс добавится новый элемент. Затем блок памяти, где был расположен прежний массив, Менеджер памяти заберёт в свой пул. И если потребуется, отдаст его полностью или частично системе. Итого, в этом случае, добавление нового элемента нам обошлось в 1 000 000 операций + накладные расходы на выделение/освобождение памяти. Это я всё к тому, чтобы показать, насколько ресурсоёмкой может оказаться операция добавления всего лишь одного элемента. Поэтому желательно перераспределять память как можно реже. Такую работу по оптимизации проводит сам Менеджер памяти ну и мы можем ему немного помочь в этом.
---
Это же касается и длинных строк типа String, AnsiString, WideString. Они устроены также как одномерные динамические массивы. - Здесь надо учитывать, что операции Insert() и Delete() могут оказаться очень ресурсоёмкими. Поэтому при обработке больших текстов следует исключать Insert() и Delete() везде, где это возможно.
Но здесь тоже до маразма доводить не надо - Менеджер памяти старается оптимизировать работу и со строками тоже. Тем не менее, бывают случаи, когда принципиально надо исключать все Insert() и Delete().
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для snake32
    Можно было показать как мы можем помочь Менеджеру памяти, например, для популярного TList и его сородичей дженериков:
    Delphi
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // заполнение списка известным кол-вом элементов
    list.Capacity := n; // сразу выделяем место для будущих n эл-тов
    for i:=1 to n do
      list.Add( newElem );
     
    // Очистка листа без перераспределения памяти
    // Метод Clear очищает список полностью,
    // но если нам ещё потребуется этот список, то можно сделать так:
    list.Count := 0;
    Запись от snake32 размещена 08.11.2012 в 18:25 snake32 на форуме
 
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru