coder.inline

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

Описание

пример

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

пример

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

Примечание

Если вы используете codegen или 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;

Больше о

свернуть все

Встраивание

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

Введенный в R2011a