Время выделения памяти для динамического массива

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Время выделения памяти для динамического массива

Сообщение avi9526 » 28.03.2015 03:36:52

Здравствуйте!

Пишу ненужную программку чтобы не было скучно. По пути написания есть проблемка…

Суть такова: создается массив байтов ("array of Byte", длину меняю командой "SetLength"), который интерпретируется как массив элементов, размер которых S-байт и которые заполняются нулями (использую "system.FillChar"). Один раз я выделяю сразу всю память под все элементы (их у меня "$100000"), другой раз добавляю элементы по одному (циклом "for"), а память под них выделяю кусками - добавляю большой кусок (размер куска T-байт) если места не хватает (т.е. память добавляется про запас и только если надо). Пробовал для разных размеров элементов (1 байт, 1025 байт, 2049 байт) и разных размеров кусков для добавления памяти (от 1 до 268435456 байт). И получился такой график
Изображение
- по оси X - размер куска для добавления памяти T; по Y - время выделения памяти под элемент и заполнения его нулями (ну и немного всяких проверок)
- белые кружочки - добавление всех элементов и памяти под них сразу (очевидно, не зависит от размера куска)
- черные кружочки - поэлементное добавление и выделение памяти кусками

Получается, что добавление памяти кусками по 524288 и больше байт занимает больше времени чем выделение той же памяти меньшими кусками (хоть и большим числом раз). Это мне не понятно. Имеется ли этому логическое объяснение (кроме того, что я мог жутко затупить при написании кода)?
Аватара пользователя
avi9526
новенький
 
Сообщения: 16
Зарегистрирован: 25.08.2010 17:10:26

Re: Время выделения памяти для динамического массива

Сообщение zub » 28.03.2015 12:54:19

Предположу что если все замеры производятся в одном сеансе программы, а выделение большого куска памяти после множества мелких выделений - возможно влияет фрагментация памяти.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru
cron