Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Удалить память блока из std::vector

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C/C++ только в данном разделе

Ответ
 
Опции темы
Старый 13.07.2013, 10:23   #1
 Пехотинец
Аватар для Annedroid
 
Annedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нацииAnnedroid гордость нации
Регистрация: 11.01.2012
Сообщений: 84
Популярность: 3472
Сказал(а) спасибо: 97
Поблагодарили 182 раз(а) в 97 сообщениях
 
По умолчанию Удалить память блока из std::vector

Здравствуйте, вообщем у меня есть сервер, внутри него
содержится вектор сессий, после удаления сессии
она убирается из списка, но память выделенная для нее
остается неосвобожденной.
Пробовала delete, но при этом вылезает ошибка.
Подскажите, пожалуйста.
Заранее спасибо.
  Ответить с цитированием
Старый 14.07.2013, 01:14   #2
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 17.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Удалить память блока из std::vector

std::vector<int>().swap(v);
Такую плюшку пробовали ?
  Ответить с цитированием
Старый 18.07.2013, 15:06   #3
 Сержант
Аватар для Benjamin
 
Benjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компании
Регистрация: 08.07.2009
Сообщений: 159
Популярность: 913
Сказал(а) спасибо: 305
Поблагодарили 197 раз(а) в 97 сообщениях
Отправить сообщение для Benjamin с помощью ICQ
 
По умолчанию Re: Удалить память блока из std::vector

Дело в том, что механизм расширения вектора основан на выделении памяти для хранения в два раза больше элементов (2 - в GCC, 1.5 - MVSC). Таким образом если в вектор вставляется новый элемент и при этом v.size() = 10 и v.capacity() = 10, происходит выделения памяти для хранения 20 элементов. Старые элементы копируются/перемещаются в новое место и добавляется вставляемый элемент. После операций v.size() = 11, v.capacity() = 20. Так как операция выделения памяти достаточно тяжелая, то в реализации вектора использовалась именно такая идея дабы увеличить производительность.

Чтобы освободить резервное место нужно вызвать v.shrink_to_fit(). Тогда v.size() будет равен v.capacity()
Ну и пример:
Цитата:
#include <iostream>
#include <vector>

void f(const std::vector<int> &v)
{
std::cout << "size = " << v.size()
<< "\ncapacity = " << v.capacity() << std::endl;
}

int main()
{
std::vector<int> v(10, 100);
f(v);
v.push_back(100);
f(v);
v.shrink_to_fit();
f(v);
return 0;
}

  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Баг] Vector Be4you<3 Баги игр ВКонтакте 46 06.07.2013 16:42
[Баг] на vector andreyzuk Баги игр ВКонтакте 1 27.06.2013 09:31
Vector leha0000 Баги игр ВКонтакте 4 11.02.2013 16:52

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 01:58.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net