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