MiklPolikov 0 June 2, 2021 Posted June 2, 2021 · Report post Всем привет ! Перестал понимать, как работает оптимизация кода. Почему вот в этом примере, под отладкой, программа проходит все шаги ? Почему компилятор сразу не считает и не подставляет готовое значение sum ? Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 2 June 3, 2021 Posted June 3, 2021 · Report post 2 hours ago, MiklPolikov said: Почему вот в этом примере, под отладкой, программа проходит все шаги ? Добрый день! Я не знаком с отладчиком Кейла. Поэтому задам такой вопрос: а в листинге всё тоже без опитимизации? Может быть отладчик как-то для пользователя искуственно "добавляет" осмысленных действий, тогда как компилятор всё оптимизировал... Это просто предположение. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 June 3, 2021 Posted June 3, 2021 · Report post Видимо, потому, что массив - static. То есть, всегда должен существовать в функции. Quote Share this post Link to post Share on other sites More sharing options...
MiklPolikov 0 June 7, 2021 Posted June 7, 2021 · Report post On 6/3/2021 at 9:49 AM, ViKo said: Видимо, потому, что массив - static. То есть, всегда должен существовать в функции. Да, действительно, убрать static помогло. Спасибо ! Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 2 June 7, 2021 Posted June 7, 2021 · Report post 12 minutes ago, MiklPolikov said: Да, действительно, убрать static помогло. Гм... странно. Компилятор же умный должен быть. Видит же, что в данной ситуации этот массив больше нигде не используется. Мог бы и оптимизировать всё. Другое дело, если бы на этот массив передавался указатель во вне. Тогда да, ещё понятно. Quote Share this post Link to post Share on other sites More sharing options...
Палыч 0 June 8, 2021 Posted June 8, 2021 · Report post А, кто объяснит: почему оптимизирует, если убрать static? Один из элементов массива не определён - его значение = мусор (если static убрать). Следовательно, значение sum определить на этапе компиляции не представляется возможным... Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 June 8, 2021 Posted June 8, 2021 · Report post 13 минут назад, Палыч сказал: А, кто объяснит: почему оптимизирует, если убрать static? Один из элементов массива не определён - его значение = мусор (если static убрать). Следовательно, значение sum определить на этапе компиляции не представляется возможным... Если static не убирать, то компилятор тоже не знает значение x[2], так как компилятор только помечает "поместить x в секцию bss с инициализацией 0", но в реале компоновщик может её и не 0 инициализировать. А без static: скорей всего компилятор должен выдать предупреждение об использовании неинициализированных данных. А вот почему автор его не увидел или проигнорировал - это уже к нему вопрос. PS: Да и вообще - разговор ни о чём, так как ТС не сделал самого главного - не привёл листинга (ни со static ни без). Что должно быть просто само собой разумеющимся для таких случаев. А без него - только гадание на кофейной гуще. Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 2 June 8, 2021 Posted June 8, 2021 · Report post 6 minutes ago, jcxz said: ТС не сделал самого главного - не привёл листинга +1. Посоветовал автору это сделать в своём первом же посте. Но либо автор игнорит мои сообщения, либо действительно занимается гаданием) Quote Share this post Link to post Share on other sites More sharing options...