mxArray 和 mwArray 的區別

2021-06-02 14:22:33 字數 1610 閱讀 1782

首先,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);

mwArray和mxArray有什麼區別?

zz 1 宣告 mxarray mxarray a mwarray mwarray a 銷毀mxarray mxdestroyarray a mwarray mwarray類的析構函式自動銷毀物件 變數傳遞 mxarray memcpy dest ptr,source ptr,max size mw...

關於mwArray 的一些資料(二)

include mclmcr.h mwarray 型別宣告 可以把mwarray看成類似於程式語言中int,float等基本型別,在具體用的過 程中轉換成你想要的型別。如果從物件導向程式設計的角度來看,mwarray其實就是所有資料型別的基類,類似於mfc中的object物件。在matlab 的開發...

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...