Могу ли я выборочно (принудительно) встроить функцию?

В книге Чистый код (и нескольких других, с которыми я сталкивался и читал) предлагается сохранять функции небольшими и разбивать их, если они стать большим. Он также предполагает, что функции должны делать одно и только одно.

В Оптимизация программного обеспечения на C ++ Агнер Фог заявляет, что ему не нравится правило разбиения функции только потому, что она пересекает определенный порог ряда строк. Он заявляет, что это приводит к ненужным скачкам, которые ухудшают производительность.

Во-первых, я понимаю, что не имеет значения, находится ли код, над которым я работаю, не в замкнутом цикле и что функции тяжелые, так что время, необходимое для их вызова затмевается время, необходимое для выполнения кода функции. Но давайте предположим, что я работаю с функциями, которые большую часть времени используются другими объектами / функциями и выполняют относительно тривиальные задачи. Эти функции соответствуют предложениям, перечисленным в первом абзаце (то есть выполняют одну единственную функцию и являются небольшими / понятными). Затем я начинаю программировать критически важную для производительности функцию, которая использует эти другие функции в тесном цикле и по сути является функцией кадра. Наконец, предположим, что их встраивание имеет преимущество для функции, критичной к производительности, но не имеет никакого преимущества для любой другой функции (да, я профилировал это, хотя и с большим количеством копий и вставок, которых я хочу избежать).

Немедленно,можно сказать, что тег функции inline позволяет компилятору выбирать. Но что, если я не хочу, чтобы все эти функции были в файле ` .inl или отображались в заголовке? В моей текущей ситуации критические для производительности функции и другие функции, которые он использует, находятся в одном исходном файле.

Подводя итог, могу ли я выборочно (принудительно) встроить функцию (ы) для одной функции, чтобы конечный код вел себя так, как будто это одна большая функция, а не несколько вызовов других функций.

25
задан Samaursa 18 August 2011 в 14:12
поделиться