coder.inline

Пакет: кодер

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

Синтаксис

coder.inline('always')
coder.inline('never')
coder.inline('default')

Описание

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

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

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

Примеры

Предотвратите функциональное встраивание

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

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

Используйте coder.inline в Операторах управления

Можно использовать 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