首先,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傾向的潛牛人,我強烈建議你使用後者!
舉一個簡單的例子:如果你需要計算c=a+b那麼兩者的區別是這樣的:
mxArray:
void fun(){
……
double d_a=1,d_b=2;
mxArray *a,*b,*c;
mlfEnterNewContext(0,0);
mlfAssign(&a,mlfScalar(d_a));
mlfAssign(&b,mlfScalar(d_b));
mlfAssign(&c,mlfPlus(a,b));
……
mlfReleasePreviousContext(0,0);
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}
mwArray:
void fun(){
……
mwArray a,b,c;
a=1;
b=2;
c=a+b;
……
}
mwArray和mxArray有什麼區別?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
matlabR2008a函數編譯成dll供vc6.0調用的方法
vopit
2019-02-23 00:27:23
想要毫無PS痕跡,你得用它
wwtwwttc
2019-02-23 14:05:24
盯完紅點,爲何白牆也能顯影?
wwtwwttc
2019-02-23 14:05:22
C# 日期格式化 年月日 星期 時間
星星鑫鑫
2019-02-23 13:19:08
關於const A* f(const A* pSrc,A* const pDst,int v=2,...) const throw();
nickybeidi
2019-02-23 00:34:31
C語言 各個類型佔用的大小
gzjyjs
2019-02-23 00:33:19
C語言 求兩個數的最大公約數
gzjyjs
2019-02-23 00:33:18
C語言 輸入一個小數,輸出它的立方。輸出保留小數點後的2位數字
gzjyjs
2019-02-23 00:33:17
C語言打印 hello world
gzjyjs
2019-02-23 00:33:17
理解 Thread.Sleep 函數 ,Sleep(0) 釋放當前線程所剩餘的時間片,讓線程馬上回到就緒隊列而非等待隊列
騎個龍凍牆
2019-02-23 00:00:18
C、C++、C#、Java、php、python語言的內在特性及區別
客棧小二哥
2019-02-22 23:51:44