Jump to content

    

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

Recommended Posts

MiklPolikov

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

3.jpg

4.jpg

Share this post


Link to post
Share on other sites

haker_fox
2 hours ago, MiklPolikov said:

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

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

Share this post


Link to post
Share on other sites

ViKo

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

haker_fox
12 minutes ago, MiklPolikov said:

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

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

Share this post


Link to post
Share on other sites

Палыч

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

haker_fox
6 minutes ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.