jcxz 342 August 25, 2024 Posted August 25, 2024 · Report post 20 минут назад, const сказал: Если я не ошибаюсь, в С++ глобальные переменные по умолчанию static, если не указано иного (extern напр.), может в этом дело. Сильно сомневаюсь в этом. Для теста только что создал в C++-проекте глобальную переменную qqq (нигде не используемую). Просто написал в main(): int qqq; После компиляции вижу имя "qqq" в результирующем .obj-файле. Далее - для теста добавляю перед int слово static: static int qqq; более ничего не меняя. Результат - имя "qqq" пропало из результирующего .obj. Вывод: Значит в первом случае "qqq" - глобальна (так как явно её имя имеется в таблице экспорта .obj-файла); а во втором - локальна. PS: IAR ARM 7.80.4 Quote Share this post Link to post Share on other sites More sharing options...
_pv 103 August 25, 2024 Posted August 25, 2024 · Report post 3 minutes ago, jcxz said: Может такое быть? Да, может. может, а lto может увидеть, что никто больше ничего в переменную glb из секции zero bss не пишет, ни в одной единице трансляции, и посчитать что там всегда 0. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 342 August 25, 2024 Posted August 25, 2024 · Report post 2 минуты назад, _pv сказал: может, а lto может увидеть, что никто больше ничего в переменную glb из секции zero bss не пишет, ни в одной единице трансляции, и посчитать что там всегда 0. Ну и пускай видит. Я же писал о том, что для корректного теста результата IAR другим компилятором, следует выключить LTO. Так как неизвестно - была ли включена LTO при компиляции примеров ТС из первого поста. Quote Share this post Link to post Share on other sites More sharing options...
const 1 August 25, 2024 Posted August 25, 2024 · Report post 4 minutes ago, jcxz said: Ну и пускай видит. Я же писал о том, что для корректного теста результата IAR другим компилятором, следует выключить LTO. Так как неизвестно - была ли включена LTO при компиляции примеров ТС из первого поста. а как это включаеся в ИАР. Понятия не имею, что такое LTO. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 August 25, 2024 Posted August 25, 2024 · Report post 15 минут назад, jcxz сказал: Сильно сомневаюсь в этом. Для теста только что создал в C++-проекте глобальную переменную qqq (нигде не используемую). Просто написал в main(): int qqq; После компиляции вижу имя "qqq" в результирующем .obj-файле. Далее - для теста добавляю перед int слово static: static int qqq; более ничего не меняя. Результат - имя "qqq" пропало из результирующего .obj. Вывод: Значит в первом случае "qqq" - глобальна (так как явно её имя имеется в таблице экспорта .obj-файла); а во втором - локальна. PS: IAR ARM 7.80.4 ТС перепутал с const. Те да - по-умолчанию статические. 5 минут назад, const сказал: а как это включаеся в ИАР. Понятия не имею, что такое LTO. У вас это вроде, называется, multi-file compilation. Но не знаю, запускается ли там полноценная LTO, и вообще есть ли она в IAR, т.к. это "фишка" GCC/CLang, т.к. они транслируют код сначала в IR (внутреннее представление), а уже потом его в общую сборную солянку bitimage, а уже потом в объектник, а уже потом в файл исполнения. Quote Share this post Link to post Share on other sites More sharing options...
const 1 August 25, 2024 Posted August 25, 2024 · Report post 3 minutes ago, Arlleex said: ТС перепутал с const. Те да - по-умолчанию статические. У вас это вроде, называется, multi-file compilation. Но не знаю, запускается ли там полноценная LTO, и вообще есть ли она в IAR. все что есть Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 August 25, 2024 Posted August 25, 2024 · Report post 3 минуты назад, const сказал: все что есть У меня IAR-а нету, но вот скрин из интернетов Видимо, у Вас какая-то старая совсем версия или что-то подобное. Quote Share this post Link to post Share on other sites More sharing options...
const 1 August 25, 2024 Posted August 25, 2024 · Report post @Arlleex Есть такое, не обратил внимания. С "Multi-file Compilation" компилируется. Листинг тот же. Ничего не выкидывает даже когда забираю обращения к портам. При дополнительном выборе "Discard Unused Publics" - не компилируется вообще - ошибка. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 August 25, 2024 Posted August 25, 2024 · Report post Да перейдите на другую версию компилятора. На предыдущей странице вы уже убедительное доказательство косяка IAR привели, когда к регистрам volatile полезли🙂 13 минут назад, const сказал: С "Multi-file Compilation" компилируется. Листинг тот же. Ничего не выкидывает даже когда забираю обращения к портам. Значит в данном случае у IAR не такая агрессивная оптимизация. Что ж, бывает. Quote Share this post Link to post Share on other sites More sharing options...