2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Динамический массив
Сообщение14.03.2009, 21:17 
Аватара пользователя
Пусть $m$ --- длина массива, $n$ --- число элементов в массиве ($(m-n)$ элементов содержат мусор). Периодически происходит добавление в массив элементов по одному, причем максимально возможное число элементов неизвестно. Когда в массиве не остаётся свободных мест, приходится в новом месте выделять область памяти большего размера и переносить в неё старую информацию.
Предлагается каждый раз при создании нового массива выделять в $2$ раза больше памяти, чем занимал предыдущий. Вопрос: является ли это оптимальным подходом?

 
 
 
 
Сообщение14.03.2009, 21:41 
Аватара пользователя
Вполне разумный подход.
Если хочется увеличить скорость работы, можно выделять больше, чем в 2 раза (в 4, в 8...), но при этом увеличивается вероятность нерационального использования памяти.

Если же хочется бережнее использовать память, можно выделять меньше, чем в 2 раза (в 1.5, 1.2, 1.1...). Но тогда увеличивается время копирования.

Если хочется одновременно и скорости и эффективности использования памяти, тогда нужно усложнять структуру данных (делать что-то вроде связанного списка кусков массива), но тогда усложняется и замедляется собственно работа с "массивом".

Добавлено спустя 2 минуты 7 секунд:

Оптимальность каждого метода зависит от того, как будет использоваться массив: преимущественно для добавления, или преимущественно для работы.

 
 
 
 
Сообщение15.03.2009, 11:28 
Аватара пользователя
Понятно.

 
 
 
 
Сообщение16.03.2009, 10:39 
Задача, в общем случае, нетривиальная. По сути, указанную проблему решают т.н. менеджеры памяти в ОС. Поищите описание работы подобных программ, или по словосочетанию "управление памятью" чтоли.

Добавлено спустя 55 секунд:

Оптимальностью подхода зависит от целей - получить наиболее быстрый код/занять меньшее кол-во памяти/меньше фрагментировать память и т.п. И в общем-то, подход системно-зависимый.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group