Size: a a a

2020 June 20

EZ

Eugene Zhulenev in pro.cxx
main:
       sub     rsp, 8
       mov     edi, OFFSET FLAT:.LC0
       call    puts
       xor     eax, eax
       add     rsp, 8
       ret
источник

EZ

Eugene Zhulenev in pro.cxx
call puts что так что эдак
источник

o

osm1um in pro.cxx
Eugene Zhulenev
main:
       sub     rsp, 8
       mov     edi, OFFSET FLAT:.LC0
       call    puts
       xor     eax, eax
       add     rsp, 8
       ret
Стоп, а что делает функция выше?
источник

EZ

Eugene Zhulenev in pro.cxx
ничего 🙂 вроде бы
источник

EZ

Eugene Zhulenev in pro.cxx
просто символ в финальном бинарнике который не используется
источник

EZ

Eugene Zhulenev in pro.cxx
а если функция помечена inline то похоже символ для нее можно не герерить если не осталось call сайтов
источник

o

osm1um in pro.cxx
Eugene Zhulenev
ничего 🙂 вроде бы
Да. Я люблю этот язык, ну или gobolt.

Так в конечном итоге, зачем вообще нужен inline спецификатор? Я всю свою жизнь думал, что у него предназначение оптимизировать мой код, а после C++17 ещё и помечать мои переменные как external linkage. (для чего кстати есть extern)
источник

EZ

Eugene Zhulenev in pro.cxx
у меня есть подозрение что фунция помеченая как inline ~= неинстанциированный шаблон --->>> ее нету в бинарнике
источник

EZ

Eugene Zhulenev in pro.cxx
inline linkage для функций которые могут быть определны в нескольких .cc файлах (функции определенные в хеадерах, или шаблоны, они по дефолту inine linkage)
источник

EZ

Eugene Zhulenev in pro.cxx
"There may be more than one definition of an inline function"
источник

o

osm1um in pro.cxx
Eugene Zhulenev
inline linkage для функций которые могут быть определны в нескольких .cc файлах (функции определенные в хеадерах, или шаблоны, они по дефолту inine linkage)
Ля, у Миши Матросова же был целый доклад!

Спасибо Миша! Спасибо Женя!

https://youtu.be/G_jcBrrYPAs

Так в конечном итоге, получается, что этот функционал вырезали из inline, или как? В какой момент я что-то перепутал?
источник

EZ

Eugene Zhulenev in pro.cxx
Таких ньансов я не знаю, но путают мне кажется процентов 99% людей пишущих на C++ 🙂 Сам об этом не так давно узнал
источник

o

osm1um in pro.cxx
Eugene Zhulenev
Таких ньансов я не знаю, но путают мне кажется процентов 99% людей пишущих на C++ 🙂 Сам об этом не так давно узнал
Об этом пишут некоторые источники:

http://www.c-cpp.ru/books/inline-funkcii

http://cppstudio.com/post/2676

https://ravesli.com/urok-101-vstroennye-funktsii/

Вообще странная фича, как будет время сам поиграю с этим чудом. Говорит мне моя чуйка, что там опять 3+ спецификации под разные кейсы и никто об этом не написал 🙃
источник

EZ

Eugene Zhulenev in pro.cxx
Может быть inline и используется как hint в gcc/clang, но на практике я никогда не видел чтобы это как то влияло на инлайнинг, внутренние эвристики все решают
источник

EZ

Eugene Zhulenev in pro.cxx
"In C99, inline means that a function's definition is provided only for inlining"
источник

EZ

Eugene Zhulenev in pro.cxx
видимо отсюа и пошла путаница
источник

o

osm1um in pro.cxx
Eugene Zhulenev
"In C99, inline means that a function's definition is provided only for inlining"
О, как завертели 🙃

А я видал как некоторые люди помечают, что-то типо array::size() как inline в 11+ стандартах.

Похоже тут никак без рекламы на TV, по типу "inline вам врал, а вы даже не думали почитать доки на cppreference!". 😂

Спасибо большое, буду знать.
источник

v

vehlwn in pro.cxx
osm1um
Ля, у Миши Матросова же был целый доклад!

Спасибо Миша! Спасибо Женя!

https://youtu.be/G_jcBrrYPAs

Так в конечном итоге, получается, что этот функционал вырезали из inline, или как? В какой момент я что-то перепутал?
А Антона Полухина был целый доклад https://youtu.be/rJWSSWYL83U?t=1936
источник

IZ

Ilia Zviagin in pro.cxx
osm1um
Ребята, есть небольшой топик который жутко сложно, долго разбирать (по крайней мере для меня).

Увидел парня, который нарисовал абсолютно на каждой функции в своей программе inline. Аргументирует это тем, что мы избавляемся от накладных расходов при вызове call.

*Чтобы сказать глупость нужно мало времени, а чтобы объяснить...* (а может я глупый)

Вот есть у нас inline, который рекомендует компилятору перенести тело функции в место вызова, что технически избавляет нас от лишней call инструкции. Но не должно же оно так работать!

*Я понимаю, что функции в 5000 строк переносить - плохая затея. Билд в 2ГБ никому не нужен. Но всё же, в относительно небольших проектах это может давать хоть какой-то значительный прирост?*

Вроде всё логично, но жутко глупо одновременно 🙃

Объясните как вообще понимать подобные вещи, я вот сижу и понять не могу. Тесты пока не проводил, да и кажется мне, что всё будет на уровне погрешности...
INLINE уже давно означает совсем другое, он почти никак не связан с встраиванием тела функции.
Твой приятель неправ от слова СОВСЕМ.
источник

IZ

Ilia Zviagin in pro.cxx
osm1um
Ребята, есть небольшой топик который жутко сложно, долго разбирать (по крайней мере для меня).

Увидел парня, который нарисовал абсолютно на каждой функции в своей программе inline. Аргументирует это тем, что мы избавляемся от накладных расходов при вызове call.

*Чтобы сказать глупость нужно мало времени, а чтобы объяснить...* (а может я глупый)

Вот есть у нас inline, который рекомендует компилятору перенести тело функции в место вызова, что технически избавляет нас от лишней call инструкции. Но не должно же оно так работать!

*Я понимаю, что функции в 5000 строк переносить - плохая затея. Билд в 2ГБ никому не нужен. Но всё же, в относительно небольших проектах это может давать хоть какой-то значительный прирост?*

Вроде всё логично, но жутко глупо одновременно 🙃

Объясните как вообще понимать подобные вещи, я вот сижу и понять не могу. Тесты пока не проводил, да и кажется мне, что всё будет на уровне погрешности...
Inlining функций действительно даёт большой прирост производительности.
Это так. Но он ведёт к тому, что код распухает. Не лезет в кэши и память и это ведёт к снижению производительности. Поэтому тут нужна мера и расчет. Поэтому inlining современные  компиляторы делают сами, без участия человека. Ключевое слово inline к встраиванию тел функций по месту вызова не имеет никакого отношения уже.
источник