1) Что лучше использовать - инлайн функции или макросы, никак не пойму их различая и когда какие использовать? 2) Как передать в параметре функции название функции, чтобы при вызове этой функции, срабатывала только та название которой передали, т.е. по имени, а не делать большой кейс, выбирая какую функцию выбирать из переданного в параметре числового значения? Спасибо.
по пункту 2) почитай про указатели на ф-ции в Си. передавай в ф-цию указатель на ф-цию и вызывай ее далее через этот указатель.
разница большая - макросы обработывает препроцессор, инлайн функции компилятор. Использование инлайн ф-ции предпочтительнее, но иногда стоит использовать макросы. Еще, не факт, что функция, объявленная как что инлайн в действительности "вставится" в код - если компилятор сочтет это нужным, он проигнорирует "inline". че то ты намудрил, надо передавать указатель (!) на функцию, по имени ты ее не вызовешь Код (Text): int foo(int (*bar)(void)) { return bar(); } никаких кейсов не надо
я бы не советовал, ибо не в стандарте, а следовательно никто не обязан это поддерживать (вроде "forceinline" переваривает только MSVC, но могу ошибаться). Хотя, если пишешь под конкретный компилятор, то можно.
_forceline тоже далеко не всегда сработает. А вообще inline лучше, зачем например встраивать код, когда затраты на вызов функции во много раз меньше чем затраты на выполнение этого кода. Это наоборот может привести к падению производительности. Так что лучше предоставить этот вопрос компилятору.
only Инлайн больших участков кода в множестве мест может плохо отразиться на размере программы и как следствие на работе с кешем. Меру надо знать во всём, в том числе и с этим.
only Инлайн подразумевает оптимизацию по скорости. Процессорный кэш ограничен по размеру, и если например требовательный к быстродействию цикл в него не помещается..., а ведь ещё есть обращение к системным библиотекам. Да и даже если кеш большой, то всё равно первое обращение к незакешрованному коду гораздо медленнее.
Это понятно Хочется увидеть пример того, когда код без передачи управления (инлайн) медленнее кода с передачей управления (отдельная функция и передача управления ей).
Booster Разговоры про аппаратуру, архитектуру это конечно хорошо. То что Вы говорите, возможно подтвердить кодом? Clear_Energy А Вам, советую чаще или просто читать документацию.
only, W4FhLF вы хотите увидеть пример на Си, но забываете, что он понятия не имеет, что такое кеш и все такое. Один и тот же код на Си будет вести себя по разному, скомпилированный под разные процессоры и даже разными компиляторами.
inline foo1)(){}; ... inline foo1000000(){}; main(){ ... M: push offset M dec ecx jz foo1 .... dec ecx jz foo1000000