Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 16:17   #21
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Про передачу параметров известно, но если в этой функции цикл или какой либо код повторяется, и нужно из функции обратиться к переменной не один раз...

а вообще какие минусы или уязвимости могут быть у глобальных переменных? Стоит ли их избегать, и стараться как можно меньше делать глобальных переменных, или на против, не бояться и сразу объявить все нужное?
Ну так и обращайтесь не один раз Это не так страшно как кажется, чтение и запись самые быстрые операции не с них оптимизацию начинать нужно. Минусы глобальных переменных в основном сказываются при многопоточном программировании, для вас пока что минусов нет, за исключением меньшей читабельности(в некоторых случаях) и не полной независимости процедуры от контекста. Вообще стараются поменьше использовать глобальные переменные, в основном практикуют передачу по ссылке либо по указателю, в случае, когда нужно вернуть значение через переменную. По поводу inline, в целом можно заставить компилятор откомпилировать помеченные этим словом ф-ции как встроенные. У VS есть директива __forceinline, у gcc не помню, тем не менее в большинстве случаев стоит полагаться на компилятор. Кстати, насчёт предложенного ozo switch'а, имхо не стоит так делать, во-первых это не распространено, потому такая запись не является интуитивно понятной и усложняет чтение, во вторых это вероятнее всего будет медленнее, чем перебор if'ами

Последний раз редактировалось netrino; 29.05.2010 в 16:20.
netrino вне форума Ответить с цитированием
Старый 29.05.2010, 16:25   #22
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Спасибо, сейчас как раз про указатели еще раз читаю, и кажется понял, что это весьма удобный инструмент. Передал функции в качестве параметра адрес переменной в памяти, и по этому адресу изменил содержимое переменной. В таком случае, работа с переменными по средствам указателей будет быстрее, чем с глобальными переменными?
Артэс вне форума Ответить с цитированием
Старый 29.05.2010, 16:30   #23
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Кстати, насчёт предложенного ozo switch'а, имхо не стоит так делать, во-первых это не распространено, потому такая запись не является интуитивно понятной и усложняет чтение, во вторых это вероятнее всего будет медленнее, чем перебор if'ами
Ты наверное будешь сидеть с секундомером и считать на 1 сотую секунды больше или меньше выполнилась данная конструкция . Артэс вообще то советую не злоупотреблять goto. Его применяй только в самых(!) крайних случаях. И когда пишешь код с циклами связан, пробуй найти такое решение, что бы меньше итераций уходило на его выполнение(такие случаи бывают и очень часто).

Когда ты передаешь адрес переменной в функцию, это намного быстрее и лучше. Например, при передаче переменной по значению происходит её копирование.

Последний раз редактировалось profi; 29.05.2010 в 16:45.
profi вне форума Ответить с цитированием
Старый 29.05.2010, 16:30   #24
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Удалил сообщение сам.

Последний раз редактировалось profi; 29.05.2010 в 16:33.
profi вне форума Ответить с цитированием
Старый 29.05.2010, 16:35   #25
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Спасибо, сейчас как раз про указатели еще раз читаю, и кажется понял, что это весьма удобный инструмент. Передал функции в качестве параметра адрес переменной в памяти, и по этому адресу изменил содержимое переменной. В таком случае, работа с переменными по средствам указателей будет быстрее, чем с глобальными переменными?
Нет, медленнее, но не настолько, чтобы не использовать их
netrino вне форума Ответить с цитированием
Старый 29.05.2010, 16:39   #26
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

И все же я не понимаю, почему стараются наоборот, использовать чаще указатели, чем глобальные переменные, если глобальные переменные работают быстрее? Взять, я не знаю... игру, или веб-сервер, или еще что-нибудь.

И в каких тогда конкретных случаях стоит использовать именно глобальные переменные, а в каких именно указатели?

Последний раз редактировалось Артэс; 29.05.2010 в 16:41.
Артэс вне форума Ответить с цитированием
Старый 29.05.2010, 16:44   #27
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Артэс часто использовать глобальные переменные - плохой стиль программирования. Так как значение глобальной переменной может быть изменено в одной части программы, а как раз в другой части(для корректной работы всей программы), оно должно иметь совершенно другое значение.
profi вне форума Ответить с цитированием
Старый 29.05.2010, 16:45   #28
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
И все же я не понимаю, почему стараются наоборот, использовать чаще указатели, чем глобальные переменные, если глобальные переменные работают быстрее? Взять, я не знаю... игру, или веб-сервер, или еще что-нибудь.

И в каких тогда конкретных случаях стоит использовать именно глобальные переменные, а в каких именно указатели?
Выигрыш по скорости будет составлять миллионные, если не миллиардные доли секунды. Опять же, это не то, что нужно оптимизировать. Указатели использовать удобнее, потому что таким образом повышается читабельность кода, не нужно лезть чёрти куда, чтобы глянуть как называется переменная, не нужно бояться многопоточности(при чём часто может упасть производительность, в случае когда несколько потоков используют одну и ту же переменную - за счёт блокировок) и, что тоже очень важно, процедура свободна от своего контекста, то бишь её можно, например, попросту скопировать в другой проект и использовать уже там. В ином случае придётся переписывать большую часть кода, дабы подогнать его под требования какой-нибудь процедуры, или же писать её заново
netrino вне форума Ответить с цитированием
Старый 29.05.2010, 16:50   #29
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Я вот и хочу написать разные модули и функции, и использовать их при написании новой программы. В итоге не придется несколько раз один и тот же код писать, достаточно будет объединить функции... но, побоялся, что упадет производительность, когда программа будет бегать от функции к функции...

а ведь доля секунды там, часть здесь, немного тут, так и может набраться ощутимая разница.

Последний раз редактировалось Артэс; 29.05.2010 в 16:56.
Артэс вне форума Ответить с цитированием
Старый 29.05.2010, 16:51   #30
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

блин, вот и мое сообщение продублировалось)
Артэс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на switch ProgramerBeatz Общие вопросы C/C++ 12 25.01.2011 00:59
switch Dimarik Общие вопросы C/C++ 4 11.04.2010 15:56
switch и string??? i-cpp Общие вопросы C/C++ 7 12.02.2010 14:58
SWITCH 8 портовый SKS Компьютерное железо 3 29.01.2009 03:39
Switch Division Общие вопросы C/C++ 3 11.01.2009 23:52