Size: a a a

cxx.Дискуссионная

2020 March 26

RM

Roy Mustang in cxx.Дискуссионная
После того как заинлайнилась в main
источник

RM

Roy Mustang in cxx.Дискуссионная
Какой из этих шлангов не прав?
источник

RM

Roy Mustang in cxx.Дискуссионная
или это вообще баг?
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Тогда как объяснить что на Windows она выкинулась, а на Linux нет?
Все вопросы к компилятору, возможно, у него была дополнительная информация, которая позволяла быть уверенным, что эта функция нигде больше не используется
источник

RM

Roy Mustang in cxx.Дискуссионная
Она не должна была по сути выкинуться только в одном случае, если один obj файл указывал на другой obj файл где эта функция используется
источник

RM

Roy Mustang in cxx.Дискуссионная
Во, Артем пришел
источник

RM

Roy Mustang in cxx.Дискуссионная
Думаю он знает
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Ofee
Ничего он не решал, я скомпилировал, MSVC тоже генерирует функцию
Разумеется, ибо на винде шланг - фронт для cl
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Она не должна была по сути выкинуться только в одном случае, если один obj файл указывал на другой obj файл где эта функция используется
Вопросы к линковщику, он мог оказаться достаточно умным
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Разумеется, ибо на винде шланг - фронт для cl
Ничего не понял
источник

RM

Roy Mustang in cxx.Дискуссионная
Объясни более просто почему так, если не сложно
источник

O

Ofee in cxx.Дискуссионная
Вообще, @r_mustang, ты не под микроконтроллеры пишешь, чтобы экономить каждые пол бита
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Разумеется, ибо на винде шланг - фронт для cl
Если не вдаваться в подробности, кратко расскажу что тут происходит, сравнили одинаковый код на Windows Clang-9 std:c++2a -O2 и Linux Clang-9 с теми же флагами и кодом, на Windows функция test заинлайнилась в main и функция test была удалена на выходном файле, а в Linux произошло все тоже самое, только функция test после инлайна в майн не удалилась из бинаря на выходе
источник

RM

Roy Mustang in cxx.Дискуссионная
Вот код который тестился
https://godbolt.org/z/S9JVwv
источник

RM

Roy Mustang in cxx.Дискуссионная
Вот тут даже godbolt говорит что test функция есть в коде
источник

RM

Roy Mustang in cxx.Дискуссионная
А посмотри в main, там test даже не вызывается, тупо заинлайнился test в main код
источник

RM

Roy Mustang in cxx.Дискуссионная
По mov esi,150 это видно
источник

RM

Roy Mustang in cxx.Дискуссионная
Там даже std::function соптимизировался
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
А посмотри в main, там test даже не вызывается, тупо заинлайнился test в main код
В любой непонятной ситуации помогай компилятору
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
В любой непонятной ситуации помогай компилятору
Щас попробую ему inline подкинуть
источник