Название: QVector. Правильное управление памятью Отправлено: __Heaven__ от Декабря 12, 2014, 09:30 Привет друзья!
Заинтересовал вопрос. Имеется: Код На каком этапе правильнее сделать sqeeze? Что происходит с памятью, когда мы делаем sqeeze? Полагаю, выделяется новый участок памяти, данные копируются в него и старый участок затирается. Название: Re: QVector. Правильное управление памятью Отправлено: Igors от Декабря 12, 2014, 10:44 На каком этапе правильнее сделать sqeeze? Необязательно, адрес может остаться тем же (но полагаться на это не стоит). На "достаточно старых ОС" sqeeze может не освобождать память. Создание tmp здесь ничего не дает - просто будет swap "пимплов", dest будет иметь тот же неиспользуемый пул. Резервирование "побольше" проблематично. Думается меньше ухищрений = лучшеЧто происходит с памятью, когда мы делаем sqeeze? Полагаю, выделяется новый участок памяти, данные копируются в него и старый участок затирается. Код
Название: Re: QVector. Правильное управление памятью Отправлено: __Heaven__ от Декабря 12, 2014, 11:52 Давайте ещё усложним
Код На строчке tmp << 4; мы получаем два массива с capacity 100500. Я правильно понимаю, что в ней выделяется память под второй массив и копируется содержимое, после чего добавляется 4? Название: Re: QVector. Правильное управление памятью Отправлено: Igors от Декабря 12, 2014, 12:06 Давайте ещё усложним Да, срабатывает имплисит шара. Пул QVector тоже копируется. Если Вам не требуется чтобы эл-ты сидели в памяти непрерывно, то лучше использовать др контейнерКод На строчке tmp << 4; мы получаем два массива с capacity 100500. Я правильно понимаю, что в ней выделяется память под второй массив и копируется содержимое, после чего добавляется 4? Название: Re: QVector. Правильное управление памятью Отправлено: __Heaven__ от Декабря 12, 2014, 17:00 Если Вам не требуется чтобы эл-ты сидели в памяти непрерывно, то лучше использовать др контейнер Мне нужно иметь плотное расположение.Кстати, а добавление в конец (без предварительной резервации памяти) и считывание по порядку у вектора, ведь, быстрее, чем у кого-либо? Название: Re: QVector. Правильное управление памятью Отправлено: Igors от Декабря 12, 2014, 17:52 Мне нужно иметь плотное расположение. Обращение по индексу - да, у вектора самое быстрое. А вот добавление в конец - вовсе нет. Поэтому для серьезных объемов есть смысл добавить сначала все в др контейнер, а когда все готово - перебросить в выходной вектор.Кстати, а добавление в конец (без предварительной резервации памяти) и считывание по порядку у вектора, ведь, быстрее, чем у кого-либо? |