【问题标题】:Matlab mexFunction(): when and how many times is it called?Matlab mexFunction():何时以及调用了多少次?
【发布时间】:2014-01-21 13:26:26
【问题描述】:

关于Matlab和C函数的问题(我不是Matlab专家):

我有一个工作的 matlab 代码(从互联网下载),它调用 一个函数'foo':

[output] = foo(input)

现在,这个函数“foo”在一个“C”文件 (foo.c) 中定义,然后编译为 Matlab 的库 (foo.mexa64)。 查看 foo.c,我可以看到有两个函数:

  1. void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
  2. void foo(double* out, double* in);

据我了解,mexFunction() 为输入和输出分配指针,并用 Matlab 代码中的适当数据填充它们。

我的问题是:如果Matlab多次调用foo,是每次调用mexFunction()还是第一次调用?

【问题讨论】:

  • foo 函数是从 mexFunction 调用的(在 C 文件中)。 mexFunction 就像一个网关,每次在 Matlab 中调用 foo 时都会被调用(就像入口函数)。但是,此调用不会对您的表现产生太大影响。

标签: matlab mex


【解决方案1】:

每次调用foo时都会调用它; MEX 函数的输入通常是不同的,因此需要通过 MEX 函数重新计算所需的输出。

【讨论】:

    【解决方案2】:

    mexFunction 在 MATLAB-foo 被调用时被调用。

    这就是 mex 接口的工作原理:

    你给 MATLAB 一个 mex 文件,MATLAB 只是从这个库中调用 mexFunction,每次你调用这个函数。 基本上,MATLAB 不关心库中的任何其他内容。

    如果您只想调用foo 的C 版本,您可能需要查看loadlibrary 的文档以及其中引用的函数。

    【讨论】:

    • foo 的C 版本上使用loadlibrary 仅在共享库导出该函数时才有效。默认情况下,MEX 文件仅公开 mexFunction 网关例程,除非您手动编译它以导出其他符号。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多