Mexファイルを繰り返し実行時にメモリ使用量が増加し続ける
6 ビュー (過去 30 日間)
古いコメントを表示
以下に示すコードのようにMATLABからC++のMexファイルを繰り返し実行していくと、MATLABのメモリ使用量が増加し続けてしまいます。
Mexファイルを以下に示します。このコードは、 https://jp.mathworks.com/help/matlab/matlab_external/c-mex-source-file.html の実装例と同じものです。
/* MyMEXFunction
* Adds second input to each
* element of first input
* a = MyMEXFunction(a,b);
*/
#include "mex.hpp"
#include "mexAdapter.hpp"
using namespace matlab::data;
using matlab::mex::ArgumentList;
class MexFunction : public matlab::mex::Function {
public:
void operator()(ArgumentList outputs, ArgumentList inputs) {
checkArguments(outputs, inputs);
const double offSet = inputs[0][0];
TypedArray<double> doubleArray = std::move(inputs[1]);
for (auto& elem : doubleArray) {
elem += offSet;
}
outputs[0] = doubleArray;
}
void checkArguments(ArgumentList outputs, ArgumentList inputs) {
// Get pointer to engine
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
// Get array factory
ArrayFactory factory;
// Check first input argument
if (inputs[0].getType() != ArrayType::DOUBLE ||
inputs[0].getType() == ArrayType::COMPLEX_DOUBLE ||
inputs[0].getNumberOfElements() != 1)
{
matlabPtr->feval(u"error",
0,
std::vector<Array>({ factory.createScalar("First input must be scalar double") }));
}
// Check second input argument
if (inputs[1].getType() != ArrayType::DOUBLE ||
inputs[1].getType() == ArrayType::COMPLEX_DOUBLE)
{
matlabPtr->feval(u"error",
0,
std::vector<Array>({ factory.createScalar("Input must be double array") }));
}
// Check number of outputs
if (outputs.size() > 1) {
matlabPtr->feval(u"error",
0,
std::vector<Array>({ factory.createScalar("Only one output is returned") }));
}
}
};
MATLABコードを以下に示します。試験的に作成したコードで、無限ループ内でMEXファイルを繰り返し実行します。
function Looptest()
offset = 10;
while (1)
outputs = MyMEXFunction(offset, rand(10));
end
end
メモリ使用量増加の原因やその対策方法がお分かりでしたら教えていただきたいです。
初歩的な質問ですみませんが、よろしくお願いいたします。
0 件のコメント
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で C++ MEX アプリケーション についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!