автоматически встроенные функции через единицы перевода и gcc 4.6 - PullRequest
6 голосов
/ 19 марта 2012

Если я не объявил функцию f как встроенную. Просто так:

хиджра:

X f(Y y);

a.cpp:

X f(Y y)
{
    ...
}

Затем в другой единице перевода:

B.cpp:

#include "A.h"

Z g(W w)
{
    ...
    ... f(...) ...
    ...
}

Затем я компилирую две единицы перевода A.o и B.o с помощью gcc 4.6, а затем связываю их также через gcc. (Может быть с -O3 для обоих шагов)

Будет ли gcc рассмотреть возможность включения функции для повышения производительности во время соединения? Или уже слишком поздно?

В обзоре кода кто-то предложил, чтобы я не объявлял свои функции как встроенные, так как компилятор знает лучше, чем когда я включаю. Я всегда был под впечатлением, если только функция не определена в заголовке, а компилятор не имеет возможности встроить ее.

(Если ответ отличается для режима C, режима C ++ или gnu ++ 0x, укажите это также)

Ответы [ 3 ]

12 голосов
/ 19 марта 2012

Функция называется Оптимизация времени соединения (LTO) и не включена по умолчанию в GCC 4.6

[править] При включенном LTO GCC сохранит представление «GIMPLE» дляX f(Y y) в A.obj.Это представление немного более обработано, чем обычная предварительная обработка C ++, но не намного.В частности, он еще не переведен на сборку.В результате компоновщик все еще может встроить его.

0 голосов
/ 19 марта 2012

Компилятор может выбрать встроенный или нет для повышения производительности. Но в этом случае компилятор беспомощен, я думаю. нет способа встроить функцию f.

NB. Даже если вы используете ключевое слово, это всего лишь предложение. окончательное решение о том, встроить или нет, зависит от компилятора. Так что нет никаких проблем в предложении компилятору.

0 голосов
/ 19 марта 2012

Я не думаю, что gcc может создавать функции make, разделенные на разные исходные файлы как встроенные.Это работает, только если вы объявляете их в одном исходном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...