Перейти к содержанию
    

Оптимизация level 3 . Почему не оптимизирует ?

Всем привет !
Перестал понимать, как работает оптимизация кода.
Почему вот в этом примере, под отладкой, программа проходит все шаги ?
Почему компилятор сразу не считает и не подставляет готовое значение sum ? 

3.jpg

4.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, MiklPolikov said:

Почему вот в этом примере, под отладкой, программа проходит все шаги ?

Добрый день! Я не знаком с отладчиком Кейла. Поэтому задам такой вопрос: а в листинге всё тоже без опитимизации? Может быть отладчик как-то для пользователя искуственно "добавляет" осмысленных действий, тогда как компилятор всё оптимизировал... Это просто предположение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо, потому, что массив - static. То есть, всегда должен существовать в функции. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/3/2021 at 9:49 AM, ViKo said:

Видимо, потому, что массив - static. То есть, всегда должен существовать в функции. 

Да, действительно, убрать static помогло.  Спасибо !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, MiklPolikov said:

Да, действительно, убрать static помогло.

Гм... странно. Компилятор же умный должен быть. Видит же, что в данной ситуации этот массив больше нигде не используется. Мог бы и оптимизировать всё. Другое дело, если бы на этот массив передавался указатель во вне. Тогда да, ещё понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А, кто объяснит: почему оптимизирует, если убрать static? Один из элементов массива не определён - его значение = мусор (если static убрать). Следовательно, значение sum определить на этапе компиляции не представляется возможным...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, Палыч сказал:

А, кто объяснит: почему оптимизирует, если убрать static? Один из элементов массива не определён - его значение = мусор (если static убрать). Следовательно, значение sum определить на этапе компиляции не представляется возможным...

Если static не убирать, то компилятор тоже не знает значение x[2], так как компилятор только помечает "поместить x в секцию bss с инициализацией 0", но в реале компоновщик может её и не 0 инициализировать.

А без static: скорей всего компилятор должен выдать предупреждение об использовании неинициализированных данных. А вот почему автор его не увидел или проигнорировал - это уже к нему вопрос.

 

PS: Да и вообще - разговор ни о чём, так как ТС не сделал самого главного - не привёл листинга (ни со static ни без). Что должно быть просто само собой разумеющимся для таких случаев. А без него - только гадание на кофейной гуще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, jcxz said:

ТС не сделал самого главного - не привёл листинга

+1. Посоветовал автору это сделать в своём первом же посте. Но либо автор игнорит мои сообщения, либо действительно занимается гаданием)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...