![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Helicopterr |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Есть некоторая ф-ция TextLine которая вызывается каждую секунду.
Есть первый вариант где массив strBuffer объявляется внутри этой ф-ции:
Есть 2 вариант где массив strBuffer глобальный:
Будет ли разница в скорости работы этих вариантов? -------------------- people can fly |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Протестируй
Имхо будет но очень мала -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Kostt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 8.1.2006 Где: Томск Репутация: 1 Всего: 3 |
Однозначно, будет - выделение и освобождение памяти тоже требуют времени. Но так как вызов всего раз в секунду этим можно пренебречь
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Имхо выделение будет производится в стеке , а это одна команда -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Разница будет незначительна. Компилятор по любому делает преобразования со стэком в начале и в конце каждой функции. Единственное что, в VC++ область данных автоматически заполняется байтом 0хCD. Тут другая опасность. Теоретически можно получить глюк, из-за переполнения стэка. Но если не использовать слишком большие массивы, вероятность мала.
Это сообщение отредактировал(а) Fin - 3.4.2006, 16:10 -------------------- Пролетал мимо. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
в принципе, хорошо, когда всё под рукой
это относится и к эффективности стек почти наверное, будет в кэше процессора, а значит, использование его вместо области памяти для глобальных переменных потенциально может принести некоторое ускорение хотя могут возникнуть вопросы с таким большим размером массива: кэш-то может быть и большой, но неизвестно (мне неизвестно), какими кусками он выбирает память... ... есть ещё кэш диска (вдруг глобальный массив окажется совсем в другой странице) вот с его точки зрения точно желательно делать переменную локальной... -------------------- qqq |
|||
|
||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
А если предположить что в начале функции объявляется мгного массивов или один но большой, ведь размер кэша не бесконечен?
Может руководствоваться размером массива? Если он невелик то пусть будет локальным? И еще что если есть третий вариант объявить внутри ф-ции: [code=cpp] static WCHAR strBuffer[512]; [\code] с целью избежать выделения памяти при каждом вызове ф-ции? -------------------- people can fly |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Это полностью эквивалентно варианту с глобальной переменной. На мой взгляд, первый вариант (с переменной в стеке) лучше. Разницу в скорости все равно не заметить и под микроскопом. Это сообщение отредактировал(а) Void - 3.4.2006, 20:33 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
это да, но в этом случае начало массива все равно будет не так далеко от "активно используемой" памяти, а многие стратегии работы кэша любят делать предположения о том, что вся работа ведется "где-то рядом" есть, правда, один вариант, когда это может ухудшить скорость: когда какие-то переменные, с которыми идет активная работа, объявлены и перед, и после массива, тогда объявление массива в этом месте приведет к разделению этих переменных и они уже не будут кэшироваться вместе... так что лучше объявлять его в начале это эквивалентно глобальной переменной... -------------------- qqq |
|||
|
||||
| regis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
ИМХО, разницы по скорости выполнения не будет никакой. (А переполнение массива -- это всегда чревато, независимо от того, находится он в стеке или в DGROUP, где сидят все глобальные данные.) Но я бы советовал выбрать стековый вариант по простой причине -- память под массив будет reusable. Вообще все данные, которые используются локально, лучше локально и объявлять. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Хорошо звучит -------------------- people can fly |
|||
|
||||
| lusil |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
Можно задать дурацкий вопрос?! КАК правильно заполнить массив с клавиатуры??
|
|||
|
||||
| Kuber |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 7.4.2006 Где: #vingrad Репутация: 1 Всего: 3 |
Можно так.
--------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:) |
||||
|
|||||
| lusil |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
ОГРОМНОЕ СПАСИБО
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |