MiklPolikov 0 Posted June 2, 2021 · Report post Всем привет ! Перестал понимать, как работает оптимизация кода. Почему вот в этом примере, под отладкой, программа проходит все шаги ? Почему компилятор сразу не считает и не подставляет готовое значение sum ? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 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 Posted June 3, 2021 · Report post Видимо, потому, что массив - static. То есть, всегда должен существовать в функции. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MiklPolikov 0 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 0 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 Posted June 8, 2021 · Report post А, кто объяснит: почему оптимизирует, если убрать static? Один из элементов массива не определён - его значение = мусор (если static убрать). Следовательно, значение sum определить на этапе компиляции не представляется возможным... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
jcxz 4 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 0 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...