-
- И в чем же я не прав, когда утверждаю, что static в отличие auto не
может размещаться в регистре? - Guest(17.10.2021 21:16, )
- Для реализации программы/алгоритма и static, и auto могут
размещаться в регистре (процессора), точнее копии тех значений из
памяти. Хранятся все они в памяти. Тип памяти, видимость, время
существования - разные. Но компилятор уверен, что эта память только под его контролем, если не указать volatile. Costic(93 знак., 17.10.2021 22:18)
- Все операции проводятся в регистрах. Но дело в том, что
auto-переменная в памяти вполне может и не размещаться, если для
п/п регистров процессора достаточно. Именно поэтому при входе в
подпрограмму у auto-переменных значение не определено. Guest(337 знак., 17.10.2021 22:57, )
- Насчёт "все операции проводятся в регистрах" — это опрометчивое заявление. В традиционных CISC, например, есть инструкция "INC (addr)". Что, кстати, добавляет перца компиляторостроителям. Например, можно ли обойтись одной этой инструкцией в этих двух случаях: 1) "int volatile i; i++;" и 2) "int volatile i; int tmp; tmp = i; i = tmp + 1;" ? - SciFi(18.10.2021 09:14)
- У вас каша в голове. Вопрос не в размещении переменной, а в её
использовании. =AlexD=(764 знак., 18.10.2021 08:54)
- Насчет volatile уже разобрались раньше. В данном случае я на
частном примере пояснял, почему auto может размещаться в регистре
даже без размещения в памяти (не учитываем пока стек), а static -
не может. Безотносительно производится оптимизация или нет.
Неполно. Согласен. Оппонент же утверждал, что static определяет
лишь область видимости, а на размещение переменной не влияет. - Guest_1(18.10.2021 10:43, )
- Цитирую себя: "Хранятся все они в памяти". "Лишь область видимости" - это вы так читаете. Costic(121 знак., 18.10.2021 17:23)
- static - разновидность глобальных переменных, только ограничивается
видимость на уровне файла либо функции. В остальном от глобальных
ничем не отличаются. - =AlexD=(18.10.2021 11:10)
- А я про что? Точно такими же словами говорю (см. выше) ;) - Guest_1(18.10.2021 11:22, )
- Для компилятора, который видит все в пределах файла, это может дать возможность для более сильной оптимизации. - AlexBi(18.10.2021 11:21)
- Насчет volatile уже разобрались раньше. В данном случае я на
частном примере пояснял, почему auto может размещаться в регистре
даже без размещения в памяти (не учитываем пока стек), а static -
не может. Безотносительно производится оптимизация или нет.
Неполно. Согласен. Оппонент же утверждал, что static определяет
лишь область видимости, а на размещение переменной не влияет. - Guest_1(18.10.2021 10:43, )
- Все операции проводятся в регистрах. Но дело в том, что
auto-переменная в памяти вполне может и не размещаться, если для
п/п регистров процессора достаточно. Именно поэтому при входе в
подпрограмму у auto-переменных значение не определено. Guest(337 знак., 17.10.2021 22:57, )
- Для реализации программы/алгоритма и static, и auto могут
размещаться в регистре (процессора), точнее копии тех значений из
памяти. Хранятся все они в памяти. Тип памяти, видимость, время
существования - разные. Но компилятор уверен, что эта память только под его контролем, если не указать volatile. Costic(93 знак., 17.10.2021 22:18)
- И в чем же я не прав, когда утверждаю, что static в отличие auto не
может размещаться в регистре? - Guest(17.10.2021 21:16, )