您的位置:首页 > 其它

关于mwArray 的一些资料(一)

2012-08-29 23:44 183 查看

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: