C ++: освобождается ли память для переменной, объявленной внутри цикла - PullRequest
0 голосов
/ 25 марта 2012

Допустим, у меня есть цикл:

for(int i = 0; i < 1000; i++)
{
    vector<int> table(100000, 0);
    int result = some_function(&table);
    // ...
}

Освобождается ли память предыдущего экземпляра таблицы в каждом цикле цикла?

Ответы [ 4 ]

3 голосов
/ 25 марта 2012

Зависит от того, что вы подразумеваете под "освобожденной памятью".

В конце каждой итерации вызывается деструктор для вектора, и поэтому вызывается деструктор для каждого содержащегося в нем элемента. Таким образом, у вас нет утечки памяти (если вас это беспокоит).

Но возвращена ли память операционной системе - это другой вопрос; это зависит от реализации. Здесь задействованы как минимум два уровня абстракции: распределитель контейнеров и стандартная реализация new / delete.

0 голосов
/ 25 марта 2012

Я бы сделал что-то подобное.Таким образом, память резервируется только один раз, но значение vector равно 0:

size_t vector_size = 100000;
vector<int> table(vector_size);
for(int i = 0; i < 1000; ++i)
{
    memset( &table[0], 0, table.size() * sizeof(int) );
    int result = some_function(&table);
    // ...
}
0 голосов
/ 25 марта 2012

Да, деструктор вектора освободит память.

0 голосов
/ 25 марта 2012

Да;vector уничтожается на каждой итерации (и создается на каждой итерации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...