我正要寫一個Mex文件,所以我可以在MATLAB中使用我的C++代碼。C++/MATLAB Mex binding
此代碼是圍繞單例類(在C++中)構建的。
我讀過的內存要持久化我必須使用MxAlloc而不是malloc/new,這對我所用的所有內存都是如此嗎?即,我使用的是矢量類,並且矢量使用標準機制自動分配新的內存。
那麼使用MxAlloc分配的類中的向量難以保持內存?
我正要寫一個Mex文件,所以我可以在MATLAB中使用我的C++代碼。C++/MATLAB Mex binding
此代碼是圍繞單例類(在C++中)構建的。
我讀過的內存要持久化我必須使用MxAlloc而不是malloc/new,這對我所用的所有內存都是如此嗎?即,我使用的是矢量類,並且矢量使用標準機制自動分配新的內存。
那麼使用MxAlloc分配的類中的向量難以保持內存?
對於要返回到Matlab的數據,只能使用MxAlloc。您的庫中的所有內容都可以正常分配。
您可能想要知道的一個問題是您的庫可以隨時卸載。通常,當用戶調用你的mexFunction時,庫被加載並且將保持加載以用於隨後的調用。然而,在任何時候Matlab都可以卸載你的庫,所以mexFunction中的所有資源都將被釋放。
如有必要,您可以使用mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html來停止卸載您的mex文件。 – Edric 2012-03-27 08:37:57
偉大的問題 - 這個問題在文檔中沒有很好的解釋。我聽說有人不必要地重新編寫整個庫,認爲他們需要改變每個內存調用以使其兼容MEX。 – 2012-03-27 08:45:51
謝謝!重寫正是我想要避免的,因爲庫仍在開發中,它會導致我有兩個庫實例,一個用於c/C++工作,另一個用於MATLAB原型。 – 2012-03-27 09:04:27
但請記住,還有一些細節我不完全確定。例如,如果Mex文件被中斷(例如,通過錯誤),則通過標準C方法分配的內存*可能不會被正確地解除分配...對於這一點,來自知情者的進一步輸入將被讚賞! – 2012-03-27 09:21:31