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

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

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

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

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

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

C++ Ввести массив вещественных чисел. Вывести локальный экстремум ( минимум или максимум), ближайший к нулю.
Создать массив векторов C++
Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? C++
C++ Локальный указатель на локальный строковый литерал
Массив векторов C++
C++ Дан массив. Найти в нем глобальный минимум или максимум
C++ Массив векторов
Глобальный вектор. Почему на выходе этот массив пуст? C++
Что содержат массивы (глобальный, локальный блоки) C++
Построение динамического массива в функции и его перевод в глобальный динамический массив C++
Глобальный динамический массив C++
Массив трехкомпонентных векторов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
01.07.2012, 01:50     Локальный или глобальный массив векторов #2
Локальный массив создается (выделяется) на стеке, т.е. после его объявления в нем будет мусор, и естественно его надо будет очистить. Глобальный массив создается в сегменте данных и при объявлении (как правило) обнуляется. Оба массива, при обработке в цикле (не знаю что вы будете с ним делать) вам придется очищать. Само собой при завершении функции, внутри которой вы объявили локальный массив, он (массив) уничтожиться, а глобальный нет. Так что смотрите что вам необходимо и выбирайте...
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.07.2012, 01:54  [ТС]     Локальный или глобальный массив векторов #3
В массиве векторов мусора не будет... его ж вообще не нужно инициализировать
Поэтому в случае глобального массива - мне его нужно чистить на каждой итерации, а в случае локального - он чистый.
И вот мне было не понятно - чистый он потому что просто чистится или полностью пересоздается.
diagon
Higher
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.07.2012, 08:39     Локальный или глобальный массив векторов #4
Пересоздается, но это не очень затратно(хотя выделение/очищение памяти происходит).
Вообще, о таких мелочах должен заботится компилятор.
Глобальным этот массив не стоит делать ни в коем случае, ибо плохой стиль.
Catstail
Модератор
22140 / 10614 / 1728
Регистрация: 12.02.2012
Сообщений: 17,662
01.07.2012, 09:03     Локальный или глобальный массив векторов #5
Локальные объекты рекомендуется использовать вовсе не из-за чистки, а из-за того, что код с локальными объектами более надежен - нет взаимного влияния процедур/функций. В принципе это - нулевой уровень инкапсуляции (см. принципы ООП). А чистить в С/С++ перед использованием я бы рекомендовал всё (благо, в C++ есть отличные возможности инициализации при создании).
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.07.2012, 09:46     Локальный или глобальный массив векторов #6
Цитата Сообщение от Union Посмотреть сообщение
И вот мне было не понятно
Создай эту 1000 векторов ПЕРЕД циклом и тогда работа с ними будет выглядеть так же, как и с глобальными. Т.е. ты будешь вектора очищать, но удаляться они не будут. И код красивый и "затрат" на создания векторов не будет.
Yandex
Объявления
01.07.2012, 09:46     Локальный или глобальный массив векторов
Ответ Создать тему
Опции темы

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