關於mwArray 的一些資料(一)


mxArray 和 mwArray 的區別

轉之於 http://blog.csdn.net/crystal_avast/article/details/7064796

首先,mxArray是Matlab C 函數庫的結構體,而mwArray是Matlab C++ 函數庫中對mxArray的包裝類。

其次,二者的內存管理方式不同。mxArray的內存管理方式比較松散,由於是C函數庫,沒有數據封裝,必須對臨時陣列和約束陣列的概念極為明確,並且須 小心地防止內存泄漏(要多寫好多代碼)。盡管有自動內存管理機制(mlfEnterNewContext,mlfReleasePreviousContext),仍然要處處調用mlfAssign,麻煩得很。然而mwArray就好的多,一切交給 C++對象去搞定,你只要放心地用就可以了。不過Matlab C++函數庫為了防止頻繁內存分配和釋放重寫了內存分配和釋放等函數。你會發現對於mwArray a,b; a=b;實際上並沒有生成兩個相同數據塊,只是指針,只有發成數據改

變時才copy完整數據。

    再次,這兩個東西各自有一套與之相對應的函數。函數的返回值類型不同,需要多加注意。

         最后,用的時候mxArray要使用指針,而mwArray直接當類對象使。如果你不是Hardcore級的牛人或具有Hardcore傾向的潛牛人,強烈建議使用后者!可以把mwArray看成類似於程序語言中int, float等基本類型,在具體用 的過程中轉換成你想要的類型。如果從面向對象編程的角度來看,mwArray其實就是所有數據類型的基類,類似於MFC中的Object對象。在 Matlab的開發中,所有的數據對象都先當成mwArray來看待,函數返回值也是以mwArray類型或mwArray數組返回,在二次開發中,根據 需要轉換成需要的數據類型就可以了,我一般做是將mwArray先轉成string,然后再將string解析成數值!mwArray感覺如同面向對象語言中的object類,正因為如此matlab的 變量和一般的編程語言不同,它不區分int,float等等。如果熟悉C#的話,對這個估計可以理解的更深。用matlab做法,mwarray是它的基 本數據類型,單個變量和數組均適用,具體需要的時候可以轉換成相應的數據類型。詳細的可以查查matlab的幫助文件,有比較詳細的說明。

聲明

mxArray:

mxArray *a;

mwArray:

mwArray a;

銷毀

mxArray

mxDestroyArray a;

mwArray

mwArray類的析構函數自動銷毀對象

變量賦值

mxArray

memcpy(dest_ptr,source_ptr,MAX_SIZE);

mwArray

mwArray in1(3, 3, mxDOUBLE_CLASS, mxREAL);
mwArray in2(3, 3, mxDOUBLE_CLASS, mxREAL);
in1.SetData(data, 9);
in2.SetData(data, 9);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM