Пакет: кодер
Управляйте встраиванием в сгенерированном коде
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
директивы, сгенерированный код использует эвристику встраивания значения по умолчанию и выдает предупреждение.
Предположим, что вы хотите сгенерировать код для функции деления, используемой системой с ограниченной памятью. Оптимизировать использование памяти в сгенерированном коде, 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;