![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 4 Всего: 15 |
Случилась проблема как в этой теме - ссылка.
Цикл For работал наоборот. Выключил оптимизацию в свойствах проекта, перебилдил - заработало нормально. Есть еще другие проекты где оптимизация осталась включенной. Стоит ли ее превентивно отключить везде? ПС Делфи 7 Это сообщение отредактировал(а) superVad - 25.11.2011, 12:17 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Если тебе мешает оптимизация, значит ты что-то делаешь неправильно.
Отключать оптимизацию - то же самое, что игнорировать варнинги. Нужно не отключать их, а исправлять недочёты в коде. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
если в теле цикла переменная цикла не используется то тогда под отладкой он работает неправильно (если включина оптимизация). имхо оптимизацию для финальной сборки лучше включить -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 4 Всего: 15 |
Идет переборка массива. Перебирать его надо обязательно вперед. Я не представляю, что я там мог сделать не правильно. Переменная используется. Вижу тогда такой выход. Заключить эту переборку в {$O-}...{$O+}. Как такой вариант? Добавлено через 6 минут и 48 секунд Собственно код:
|
|||
|
||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Не много не втему.
Это лучьше вынести в отдельную переменную и считать в цикле.
Это лучьше выполнить за циклом
Это сообщение отредактировал(а) ivan219 - 25.11.2011, 14:15 |
||||
|
|||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 4 Всего: 15 |
ivan219, согласен, будет более читаемо.
А так - там 9 записей в массиве, не очень длинных. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
почему? если в missing_tables := alias_conditions[alias_conditions_num, 1] + missing_tables; поменять местами alias_conditions[alias_conditions_num, 1] и missing_tables то разницы нет. Ты уверен что компилятор не сделал и такую замену? -------------------- Обижено школьников: 8 |
|||
|
||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 4 Всего: 15 |
В alias_conditions[alias_conditions_num, 1] содержатся такие строки - LEFT OUTER JOIN Table T ON (A.ID = T.ID). Если поменять местами как ты предлагаешь то некоторые строки окажутся ниже чем обращение к ним в других строках. Если проход делать в обратном порядке, то некоторые строки вообще не попадут в missing_tables. Всмысле поменял местами строки? Это вряд ли. Добавлено через 9 минут и 19 секунд Все я понял про, что ты. Включил оптимизацию назад. Перебирает действительно наоборот, но строка собирается правильная. Видать ошибка была у меня в другом месте, я ее исправил, но продолжал грешить на оптимизатор. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
У меня под ХЕ2 была другая оптимизация. Компилятор вообще выкинул использование индекса, и перешел к арифметике указателей. В регистре держал адрес указателя на alias_conditions, и в нужном месте увеличивал его. Соответственно регистр представляющий alias_conditions_num теперь безболезненно может изменяться в обратном порядке (в моём случае еще и от 3 до одного вместо от 2 до 0, 2 - это максимальный индекс alias_conditions в моём эксперименте)
Короче тебе правильно сказали что сначала нужно убедиться оптимизация действительно ломает логику, а потом уже думать что делать -------------------- Обижено школьников: 8 |
|||
|
||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 4 Всего: 15 |
bems, оптимизатор это конечно хорошо. Но если бы не он то я в минуту бы отловил баг дебагером.
А так даже на форум пришлось писать Это сообщение отредактировал(а) superVad - 25.11.2011, 17:20 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
ну не даром в последних версиях оптимизация подефолту выключена в дебажной сборке. Пришли к тому что уже давно есть в VC++
Добавлено через 2 минуты и 41 секунду а раз пользуешься старыми версиями можешь сделать как-то так
-------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |