2012-03-27 18 views
7

Bir Mex Dosyası yazmak üzereyim, bu yüzden C++ kodumu MATLAB'de kullanabilirim.C++/MATLAB Mex ciltleme

Bu kod tekil bir sınıf etrafında (C++) oluşturulur.

Hafızanın kalıcı olması için MxAlloc'un malloc/new isntead özelliğini kullanmam gerektiğini okudum, kullandığım tüm bellekler için bu doğru mu? I.e, benim kullandığım sınıf vektörleri ve vektörleri standart mekanizmaları kullanarak otomatik olarak yeni bellek ayırır.

MxAlloc kullanarak ayrılmış bir sınıftaki bir vektör, belleğini saklamada sorun yaşar?

+0

Harika bir soru - bu sorun belgelerinde çok açıklanmamış. İnsanların her kütüphaneyi MEX-uyumlu hale getirmek için değiştirmeleri gerektiğini düşünerek bütün kütüphaneleri gereksiz yere yeniden yazdığını duydum. –

+0

Teşekkür ederiz! Yeniden yazmak, kütüphane hala geliştirilmekte olduğu için kaçınmak istediğim bir şeydi ve kütüphanenin 2 örneğini, bir c/C++ çalışması için bir tane ve MATLAB prototipleme için bir tane elde etmemi sağladı. –

+0

Ancak aklınızdan çıkarmayın, daha fazla incelik olduğundan emin değilim. Örneğin, eğer Mex dosyası kesintiye uğruyorsa (örneğin bir hata ile), standart C yöntemleri * ile tahsis edilen bellek düzgün bir şekilde tahsis edilemez ... bu noktadaki bilginin bilindiği kişilerden daha fazla girdi takdir edilecektir! –

cevap

7

Yalnızca Matlab'a döneceğiniz veriler için MxAlloc kullanırsınız. Kütüphanenizde kalan her şey normal olarak tahsis edilebilir.

Farkında olmak isteyebileceğiniz bir konu kütüphanenizin herhangi bir zamanda boşaltılabilmesidir. Normalde kullanıcı mexFunction'unuzu çağırdığında kütüphane yüklenir ve sonraki çağrılar için yüklenir. Bununla birlikte, Matlab kitaplığınızı istediğiniz zaman kaldırabilir ve böylece mexFunction'unuzdaki tüm kaynaklar boşaltılabilir.

+3

Gerekirse, mex dosyanızın yüklenmesini durdurmak için mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html dosyasını kullanabilirsiniz. – Edric