Come evitare l'inizializzazione duplicata di .mex (codice compilato Matlab)?

Come evitare l'inizializzazione duplicata di .mex (codice compilato Matlab)?


Ho un codice Matlab che chiama un MEX generato dal codice c++.
Il codice c++ richiede un'allocazione di memoria e calcoli pesanti all'inizializzazione.
Utilizzando un puntatore statico, l'inizializzazione viene eseguita solo alla prima chiamata e il puntatore viene letto nelle chiamate successive.


Tutto ha funzionato bene fino a quando questo codice Matlab è stato compilato utilizzando Matlab Compiler. Ora le successive chiamate al MEX (che ora si verificano all'interno del codice compilato da matlab) finiscono per bloccarsi perché il puntatore statico apparentemente fa riferimento a una memoria non valida.


Cosa si può fare per evitare l'inizializzazione duplicata in questo caso?


Grazie,
Leone


Alcune risposte al codice


function [out1, out2] = test1(in)   a = 1:10;
b = 2:40;
% Without coder.ignoreSize duplicate functions are generated out1 = indexOf(coder.ignoreSize(a), in);
out2 = indexOf(coder.ignoreSize(b), in);
end function index = indexOf(array, value) coder.inline('never');
for i = 1:numel(array)
if array(i) == value
index = i;
return
end end index = -1;
return end
codegen test1 -config:lib -report -args {1} 
function [out3, out4] = test2(in)   c = ['a', 'b', 'c'];
if in >
0
c(2)='d';
end out3 = indexOf(c, coder.ignoreConst('a'));
out4 = indexOf(c, coder.ignoreConst('b'));
end function index = indexOf(array, value) coder.inline('never');
for i = 1:numel(array)
if array(i) == value
index = i;
return
end end index = -1;
return end
codegen test2 -config:lib -report -args {1} 
[a b] = foo();
c = foo();
[a b] =foo();
[c, ~] =foo();