Встраивание функций из отдельного файла в GCC - PullRequest
3 голосов
/ 19 октября 2011

У меня узкий внутренний цикл в моем проекте, который вызывает несколько вспомогательных функций. Для максимальной производительности эти простые функции объявлены как:

BOOL isValidPoint(CGPoint point) __attribute__((always_inline));

в моем файле ImageCommon.h и реализовано как:

inline BOOL isValidPoint(CGPoint point);

в ImageCommon.m. Другими словами, я всегда хочу, чтобы эти функции были встроенными.

Если я вызываю isValidPoint из других функций в ImageCommon.m, вывод дизассемблирования подтверждает, что вызов функции isValidPoint был уничтожен. Но если я вызову эту функцию из другого исходного файла, вызов функции останется на месте - он не будет встроенным.

Можно ли встроить функции, вызываемые в одном файле реализации, но определенные в другом?

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

Попробуйте объявить его «статическим встроенным» вместо просто «встроенным». Затем компилятор будет обрабатывать его как локальный для модуля перевода и должен выяснить, что он действительно может быть встроенным.

РЕДАКТИРОВАТЬ: Извините, я не видел, чтобы у вас была определена эта функция в единице перевода. Определение также необходимо переместить в .h со «статическим встроенным» для работы.

1 голос
/ 19 октября 2011

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

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

0 голосов
/ 19 октября 2011

Мой ответ будет таким: вы следуете правилу 90:10 оптимизации.В основном, 90% программистов не знают, что оптимизировать, поэтому у них есть 10% шанс угадать 10% кода, который им нужно оптимизировать (отрыв от какого-то другого правила)

В основномничего не вставляйте - пусть компилятор сделает это

...