coder.inline

Управляйте встраиванием определенной функции в сгенерированный код

Описание

пример

coder.inline('always') принудительно вводит текущую функцию в сгенерированный код. Поместите coder.inline директива внутри функции, которую вы хотите встроить. Генератор кода не строит функции точки входа и рекурсивные функции. Кроме того, генератор кода не встраивает функции в parfor циклы или встроенные функции, вызываемые из parfor циклы.

пример

coder.inline('never') предотвращает встраивание текущей функции в сгенерированный код. Предотвратите встраивание, когда хотите упростить отображение между MATLAB® исходный код и сгенерированный код.

Примечание

Если вы используете codegen (MATLAB Coder) или fiaccel (Fixed-Point Designer), можно отключить инкрустацию для всех функций при помощи -O disable:inline опция.

Если вы генерируете код C/C + + при помощи codegen команда или приложение MATLAB Coder™, вы можете иметь различные требования скорости и читаемости для кода, сгенерированного для функций, которые вы пишете, и кода, сгенерированного для MathWorks® функций. Некоторые дополнительные глобальные настройки позволяют вам отдельно контролировать поведение встраивания для этих двух частей сгенерированного кода основы и в контур между ними. См.

coder.inline('default') инструктирует генератор кода использовать внутреннюю эвристику, чтобы определить, вводить ли текущую функцию в строку. Обычно эвристика производит высоко оптимизированный код. Использование coder.inline явным образом в функциях MATLAB только тогда, когда необходимо настроить эти оптимизации.

Примеры

свернуть все

В этом примере функция foo не вписан в сгенерированный код:

function y = foo(x)
  coder.inline('never');
  y = x;
end

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

Предположим, что вы хотите сгенерировать код для функции деления, которая работает в системе с ограниченной памятью. Чтобы оптимизировать использование памяти в сгенерированном коде, inline_division функция вручную управляет инкрустацией, основываясь на том, выполняет ли она скалярное деление или векторное деление:

function y = inline_division(dividend, divisor)

% For scalar division, inlining produces smaller code
% than the function call itself.  
if isscalar(dividend) && isscalar(divisor)
   coder.inline('always');
else
% Vector division produces a for-loop.
% Prohibit inlining to reduce code size.
   coder.inline('never');
end

if any(divisor == 0)
   error('Cannot divide by 0');
end

y = dividend / divisor;

Подробнее о

свернуть все

Inlining

Метод, который заменяет вызов функции на содержимое (тело) этой функции. Inlining устраняет накладные расходы на вызов функции, но может привести к увеличению кода C/C + +. Инлайнинг может создать возможности для дальнейшей оптимизации сгенерированного кода C/C + +.

Введенный в R2011a