Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Часто использевать разыменование или создать перем 
:(
    Опции темы
vdm
Дата 19.6.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



На что в цикле уйдёт больше времени?
На исползевание разыменования так: 

Код

for int i=0; i <=1000000; i++) 
{ 
if ((*(unsigned*)((byte*)(а)) > 50) || (*(unsigned*)((byte*)(а)) > 60) || (*(unsigned*)((byte*)(а)) > 70) || (*(unsigned*)((byte*)(а)) > 80) || (*(unsigned*)((byte*)(а)) > 90) || (*(unsigned*)((byte*)(а)) > 1000) 
{ ... 
} 
} 

или так:
Код

for int i=0; i <=1000000; i++) 
{ 
unsigned с = *(unsigned*)((byte*)(а)); if (c > 50) || (c > 60) || (c > 70) || (c > 80) || (c > 90) || (c > 1000) { ... } }

PM MAIL   Вверх
mes
Дата 19.6.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
if (c > 50) || (c > 60) || (c > 70) || (c > 80) || (c > 90) || (c > 1000) { ... } }

а не кажется ли вам что все остальные условия истины в случае истиности первого и проверка дальнейшая бессмыслена


Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
На что в цикле уйдёт больше времени?
На исползевание разыменования так:


ИМХО так :  unsigned &с = *(unsigned*)а;      for (.. ) { if .. }

Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
*(unsigned*)((byte*)(а)); 

P.S. Конструкция сильно подозрительная.. помойму надо бы пересмотреть код приводяший к этому


Это сообщение отредактировал(а) mes - 19.6.2008, 17:21


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 19.6.2008, 18:30 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(mes @  19.6.2008,  17:11 Найти цитируемый пост)
(c > 50) || (c > 60) || (c > 70) || (c > 80) || (c > 90) || (c > 1000)

 smile 


--------------------
PM MAIL ICQ Skype   Вверх
vdm
Дата 19.6.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Цитата(mes @ 19.6.2008,  17:11)
Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
if (c > 50) || (c > 60) || (c > 70) || (c > 80) || (c > 90) || (c > 1000) { ... } }

а не кажется ли вам что все остальные условия истины в случае истиности первого и проверка дальнейшая бессмыслена


Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
На что в цикле уйдёт больше времени?
На исползевание разыменования так:


ИМХО так :  unsigned &с = *(unsigned*)а;      for (.. ) { if .. }

Цитата(vdm @  19.6.2008,  16:52 Найти цитируемый пост)
*(unsigned*)((byte*)(а)); 

P.S. Конструкция сильно подозрительная.. помойму надо бы пересмотреть код приводяший к этому

Пример, действительно дурной и не правильный, но мысль ясна. К стате, за пределы цыкла, переменную выносить нельзя. Какой метод эфективнее тогда? smile
PM MAIL   Вверх
MAKCim
Дата 19.6.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 19.6.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vdm @  19.6.2008,  19:20 Найти цитируемый пост)
К стате, за пределы цыкла, переменную выносить нельзя. Какой метод эфективнее тогда? 

обрати внимание что при выносе за цикл происходит НЕ присваивание значения, а берется ссылка. 
Цитата(vdm @  19.6.2008,  19:20 Найти цитируемый пост)
но мысль ясна

да мысль ясна, но не ясно как все это выглядит на практике и потому совет может увести в сторону от правильного решения..



--------------------
PM MAIL WWW   Вверх
Любитель
Дата 20.6.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(mes @  19.6.2008,  20:53 Найти цитируемый пост)
обрати внимание что при выносе за цикл происходит НЕ присваивание значения, а берется ссылка. 

Ты о чём?


--------------------
PM MAIL ICQ Skype   Вверх
mes
Дата 20.6.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Любитель @  20.6.2008,  11:28 Найти цитируемый пост)
Ты о чём? 


Цитата(mes @  19.6.2008,  17:11 Найти цитируемый пост)

ИМХО так :  unsigned &с = *(unsigned*)а;      for (.. ) { if .. }

Цитата(vdm @  19.6.2008,  19:20 Найти цитируемый пост)
К стате, за пределы цыкла, переменную выносить нельзя

Цитата(mes @  19.6.2008,  20:53 Найти цитируемый пост)
обрати внимание что при выносе за цикл происходит НЕ присваивание значения, а берется ссылка. 




--------------------
PM MAIL WWW   Вверх
Любитель
Дата 20.6.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



mes, ты хочешь сказать, что указатель/ссылка в данном случае имеет значение? smile Продолжим прошлую тему? smile 


--------------------
PM MAIL ICQ Skype   Вверх
mes
Дата 20.6.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Любитель @  20.6.2008,  11:52 Найти цитируемый пост)
mes, ты хочешь сказать, что указатель/ссылка в данном случае имеет значение?  Продолжим прошлую тему?   

нет.. я хотел лишь сказать, что если есть "глубоко зарытая" переменная (a.b.c.d) то в цикле оптимизированней будет использовать ссылку (указатель) проинициализированный вне цикла...  


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.