Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

coder.inline

控制生成的代码中特定函数的内联

说明

示例

coder.inline('always') 在生成的代码中强制对当前函数进行内联。将 coder.inline 指令放在要内联的函数中。代码生成器不对入口函数和递归函数进行内联。此外,代码生成器不会将函数内联到 parfor 循环中,也不会内联从 parfor 循环调用的函数。

示例

coder.inline('never') 可阻止在生成的代码中内联当前函数。当您要简化 MATLAB® 源代码和生成代码之间的映射时,请阻止内联。

注意

如果使用 codegenfiaccel (Fixed-Point Designer) 命令,则可以使用 -O disable:inline 选项对所有函数禁用内联。

如果您使用 codegen 命令或 MATLAB Coder™ 生成 C/C++ 代码,则对于为您编写的函数生成的代码和为 MathWorks® 函数生成的代码,您可能有不同的速度和可读性要求。某些其他全局设置使您能够分别控制生成的代码库的这两个部分以及它们之间边界处的内联行为。请参阅Control Inlining to Fine-Tune Performance and Readability of Generated Code

如果代码生成器不阻止生成的代码中的函数内联(即使它包含 coder.inline('never') 指令),请对 MATLAB 代码中的函数调用点的输入使用 coder.ignoreConst 函数。有关详细信息,请参阅Resolve Issue: coder.inline('never') Does Not Prevent Inlining of Function

coder.inline('default') 指示代码生成器使用内部启发式方法来确定是否内联当前函数。通常,启发式方法会生成高度优化的代码。仅当需要微调这些优化时,才在 MATLAB 函数中显式使用 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;

详细信息

全部折叠

内联

内联是一种将函数调用替换为该函数的内容(主体)的方法。内联消除了函数调用的开销,但会生成更多的 C/C++ 代码。如果生成的 C/C++ 代码使用了内联,则可能有进一步优化的空间。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2011a 中推出