знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы (при компиляции подставляют код "функции" в программу), но увеличивают размер программы. Понятно, что в огромные циклы подставлять функции не стоит, но кажется в некоторых иных ситуациях память поважнее.
Компилятор сам умеет оптимизировать такие моменты
а разве процесс при не вызывает функции с длл?
Ему еще нужно указывать опции оптимизации ваще-то)
g++ -O3 file.cpp - o oitputfile.cpp
Не сильно дорогая, но и недешёвая. За это можешь в любом случае не волноваться, потому что на С не получится оптимизировать все функции так. А вот на ассемблере конкретно можно сократить вызов GetTickCount, напрямую взяв значение из сегмента системы fs (Windows). Кстати, страшная тайна - внутри системных библиотек плохая оптимизация 😱
Я скорее про собственные функции, а не стандартную библиотеку, так как пишу в том числе под мк. А например со скольки возможных повторений цикла стоит убрать функцию? 1000? 1000000?
С любых. Более того, это может также убрать пролог и эпилог внутри цикла, оставив только сохранение счётчика цикла.
Макросы никак не увеличивают размер исполняемего файла, препроцессор не так работает. Это просто текст-замена
ну препроцессор заменяет макросы на код макроса, и если макрос большой, а упоминается часто может получиться много одинакового кода
Ну, значит плохая логика программы, раз у тебя код так дублируется
Конечно, бывают случаи, когда это неизбежно. Нормально иметь функцию, которая вызывается по n раз в разных местах программы, на то они и придуманы. Тут уже смириться надо, либо попытаться решить "проблему" на архитектурном уровне программы
По сравнению с вычислением косинуса на фпу раз в десять дешевле
Обсуждают сегодня