В книге Чистый код (и пару других, с которыми я сталкивался и читал), предлагается сохранять функции небольшими и разбивать их, если они становятся большими.Также предлагается, чтобы функции выполняли одно и только одно.
В Оптимизация программного обеспечения на C ++ Агнер Фог заявляет, что ему не нравится правило разбиения функции только потому, что оно пересекаетопределенный порог количества строк.Он заявляет, что это приводит к ненужным скачкам, которые ухудшают производительность.
Прежде всего, я понимаю, что не будет иметь значения, если код, над которым я работаю, не находится в узком цикле и что функции тяжелы, так чтовремя, требуемое для их вызова, уменьшается по сравнению с временем выполнения кода в функции.Но давайте предположим, что я работаю с функциями, которые в большинстве случаев используются другими объектами / функциями и выполняют относительно тривиальные задачи.Эти функции следуют рекомендациям, перечисленным в первом абзаце (то есть выполняют одну единственную функцию и являются небольшими / понятными).Затем я начинаю программировать критически важную для производительности функцию, которая использует эти другие функции в замкнутом цикле и по существу является функцией кадра.Наконец, предположим, что их встраивание имеет преимущество для критически важной для производительности функции, но не дает никакой выгоды для любой другой функции (да, я это профилировал, хотя с большим количеством копий и вставок, которых я хочу избежать).
Сразу можно сказать, что пометить функцию inline
и позволить компилятору выбирать.Но что, если я не хочу, чтобы все эти функции были в файле ` .inl или отображались в заголовке?В моей нынешней ситуации все критически важные для производительности функции и другие используемые им функции находятся в одном исходном файле.
Подводя итог, могу ли я выборочно (принудительно) встроить функцию (и) для одной функции, чтобы конечный код вел себя так, как будто это одна большая функция, а не несколько вызовов других функций.