-
- ПМСМ, отключение оптимизации при отладке слишком сильно меняет код и время его выполнения, что делает отладку слишком оторванной от конечного продукта. Не согласен на счёт бесполезности volatile для предотвращения подмены адреса. Nikolay_Po(691 знак., 04.05.2019 20:40)
- Ну как вы себе представляете замену адреса значением? Пусть написано n=strlen("abc"), тогда очень умный компилятор, знающий, что делает strlen, может заменить этот код на n=3, но не на n=strlen(3). Если функция имеет прототип strlen(const char *), йцукен(94 знак., 04.05.2019 22:16)
- Если во всех местах вызова функция принимает параметр, вычисление которого дает константу, то и передавать в нее константу. Скрипач(65 знак., 05.05.2019 09:21)
- Если функция используется только для строк с длиной 3, то компилятор просто подставит 3, выкинув остальное нафиг. Безотносительно прототипа функции. Похоже, вы отстали от жизни. Или мне попадаются исключительно передовые компиляторы. - Nikolay_Po(04.05.2019 22:30)
- Может, я и отстал от жизни, но ТС утверждает, что функция CRC(char*,int) вызывается, но ей с качестве параметра вместо адреса передаётся значение. Я так и написал, что если компилятор знает, что вернёт чистая функция, он имеет право её не йцукен(75 знак., 04.05.2019 22:54 - 22:58)
- А я не исключаю того, что если функция в примере ТС вызывается с передачей параметра вместо адреса, то она вызывается с передачей параметра вместо адреса во всех остальных местах вызова. Nikolay_Po(219 знак., 04.05.2019 23:01)
- Во всех остальных местах вызова чего? На каком этапе, пардон, принимается решение о замене адреса значением, компиляции модуля или линковки? s_h_e(100 знак., 04.05.2019 23:24)
- LTO? Хороший вопрос. Для начала нужно проверить моё предположение. ТС не пояснил, проверял ли он в отладке оба варианта, с константой ПЗУ и с переменной в одном исходнике, при отладке одной сборки? Nikolay_Po(700 знак., 05.05.2019 00:09)
- Настолько упоротая LTO пока не попадалась. Выкинуть неиспользуемые функции, например - другое дело. s_h_e(406 знак., 05.05.2019 07:46)
- LTO? Хороший вопрос. Для начала нужно проверить моё предположение. ТС не пояснил, проверял ли он в отладке оба варианта, с константой ПЗУ и с переменной в одном исходнике, при отладке одной сборки? Nikolay_Po(700 знак., 05.05.2019 00:09)
- Во всех остальных местах вызова чего? На каком этапе, пардон, принимается решение о замене адреса значением, компиляции модуля или линковки? s_h_e(100 знак., 04.05.2019 23:24)
- А я не исключаю того, что если функция в примере ТС вызывается с передачей параметра вместо адреса, то она вызывается с передачей параметра вместо адреса во всех остальных местах вызова. Nikolay_Po(219 знак., 04.05.2019 23:01)
- Может, я и отстал от жизни, но ТС утверждает, что функция CRC(char*,int) вызывается, но ей с качестве параметра вместо адреса передаётся значение. Я так и написал, что если компилятор знает, что вернёт чистая функция, он имеет право её не йцукен(75 знак., 04.05.2019 22:54 - 22:58)
- volatile означает ровно то, что написано в стандарте языка Си, и там написано совсем не то, что вы тут придумали. Можно придумать соскок "нестандартная прагма означает, что стандарт языка неприменим, творим что хотим", но это совсем неприлично. То SciFi(107 знак., 04.05.2019 21:10)
- завтра на работу не пойду, не надо провоцировать!) - VLLV(04.05.2019 21:29)
- Ну как вы себе представляете замену адреса значением? Пусть написано n=strlen("abc"), тогда очень умный компилятор, знающий, что делает strlen, может заменить этот код на n=3, но не на n=strlen(3). Если функция имеет прототип strlen(const char *), йцукен(94 знак., 04.05.2019 22:16)
- ПМСМ, отключение оптимизации при отладке слишком сильно меняет код и время его выполнения, что делает отладку слишком оторванной от конечного продукта. Не согласен на счёт бесполезности volatile для предотвращения подмены адреса. Nikolay_Po(691 знак., 04.05.2019 20:40)