Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

Локальный или глобальный массив векторов - C++

01.07.2012, 01:35. Просмотров 728. Ответов 5
Метки нет (Все метки)

Везде в литературе рекомендуется создавать локальные объекты. Основные аргументы - они легче оптимизируются и безопаснее.
У меня такия ситуация:
Есть массив из 1000 векторов. Если я создам его глобальным, то в цикле на каждой итерации их (вектора в массиве) будет необходимо очищать, что впринципе не затратно. Если же я сделаю его локальным, то не понятно что будет происходить. Возможно на каждой итерации вектора будут создаваться снова и под них будет выделяться память... или же компилятор оптимизирует до простой очистки...
Что всётаки лучше в таком случае, глобальный или локальный массив?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 01:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Локальный или глобальный массив векторов (C++):

Что содержат массивы (глобальный, локальный блоки) - C++
Что содержат sa, ia, sa2, ia2 ? Только сразу скажу, что меня не интересует, что выведет компилятор. string sa; int ia; int...

Дан массив. Найти в нем глобальный минимум или максимум - C++
Помогите пожалуйста! Очень нужно решение Дан массив А(М). Найти в нем глобальный минимум или максимум.

Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? - C++
Начать с массивов, допустим То есть ситуация такая: пусть имеется два потока и глобальный массив элементов int из двух элементов, один...

Ввести массив вещественных чисел. Вывести локальный экстремум ( минимум или максимум), ближайший к нулю. - C++
Как ввести массив вещественных чисел, чтобы вывести локальный экстремум ( минимум или максимум), ближайший к нулю. Помогите плз.

Создать класс для обработки векторов разность векторов норму векторов - C++
Создать класс для обработки векторов разность векторов норму векторов

Глобальный динамический массив - C++
В общем проблема вот в чем, пытаюсь сделать глобальный динамический массив структур но что-то идет не так. Странная ошибка с ";" при...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
01.07.2012, 01:50 #2
Локальный массив создается (выделяется) на стеке, т.е. после его объявления в нем будет мусор, и естественно его надо будет очистить. Глобальный массив создается в сегменте данных и при объявлении (как правило) обнуляется. Оба массива, при обработке в цикле (не знаю что вы будете с ним делать) вам придется очищать. Само собой при завершении функции, внутри которой вы объявили локальный массив, он (массив) уничтожиться, а глобальный нет. Так что смотрите что вам необходимо и выбирайте...
0
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.07.2012, 01:54  [ТС] #3
В массиве векторов мусора не будет... его ж вообще не нужно инициализировать
Поэтому в случае глобального массива - мне его нужно чистить на каждой итерации, а в случае локального - он чистый.
И вот мне было не понятно - чистый он потому что просто чистится или полностью пересоздается.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.07.2012, 08:39 #4
Пересоздается, но это не очень затратно(хотя выделение/очищение памяти происходит).
Вообще, о таких мелочах должен заботится компилятор.
Глобальным этот массив не стоит делать ни в коем случае, ибо плохой стиль.
0
Catstail
Модератор
22619 / 10980 / 1779
Регистрация: 12.02.2012
Сообщений: 18,123
01.07.2012, 09:03 #5
Локальные объекты рекомендуется использовать вовсе не из-за чистки, а из-за того, что код с локальными объектами более надежен - нет взаимного влияния процедур/функций. В принципе это - нулевой уровень инкапсуляции (см. принципы ООП). А чистить в С/С++ перед использованием я бы рекомендовал всё (благо, в C++ есть отличные возможности инициализации при создании).
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.07.2012, 09:46 #6
Цитата Сообщение от Union Посмотреть сообщение
И вот мне было не понятно
Создай эту 1000 векторов ПЕРЕД циклом и тогда работа с ними будет выглядеть так же, как и с глобальными. Т.е. ты будешь вектора очищать, но удаляться они не будут. И код красивый и "затрат" на создания векторов не будет.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2012, 09:46
Привет! Вот еще темы с ответами:

Глобальный динамический двумерный массив - C++
Вообще то задача на Си, но в разделе мало людей, поэтому пишу тут, помогите пожалуйста. Вообщем есть задача считать файл в функции init(),...

Глобальный вектор. Почему на выходе этот массив пуст? - C++
юзаю либу вектор. почему на выходе этот массив пуст? std::vector<int> qw;//global int main() { int i=1; qw.push_back(i); ...

Строковый массив (объявить пустой глобальный строковый массив из 16 элементов) - C++
Подскажите, как объявить пустой глобальный строковый массив из 16 элементов? в качестве элементов будут указаны пути к графическим...

Построение динамического массива в функции и его перевод в глобальный динамический массив - C++
Здравствуйте, моя проблема заключается в передаче построеного в функции динамического массива fdarray в глобальный динамический массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.07.2012, 09:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru