主要内容

处理大mxArrays在C MEX文件中

在64位平台上构建的二进制MEX文件可以处理64位MX阵列这些大型数据数组最多可以有2个481的元素。稀疏的元素的最大数目MX阵列可以有2个48-2.

使用下面的说明也可以创建独立于平台的二进制MEX文件。

你的系统配置会影响MATLAB的性能®.64位处理器要求允许您创建MX阵列并访问其中的数据。但是,系统内存,特别是RAM和虚拟内存的大小,决定了MATLAB处理数据的速度MX阵列.可用的内存越多,处理速度就越快。

RAM的数量也限制了您在MATLAB中一次可以处理的数据量。有关内存问题的指导,请参阅高效使用内存的策略

使用64位API

下表中显示的API函数的签名使用mwSizemwIndex类型来处理64位MX阵列.在源代码中用于调用这些函数的变量必须是正确的类型。

CMX阵列函数的使用mwSize/mwIndex

mxCalcSingleSubscript mxGetJc
mxCalloc mxGetM
mxCreateCellArray mxGetN
mxCreateCellMatrix mxGetNumberOfDimensions
mxCreateCharArray mxGetNumberOfElements
mxCreateCharMatrixFromStrings mxGetNzmax
mxCreateDoubleMatrix mxGetProperty
mxCreateLogicalArray mxGetString
mxCreateLogicalMatrix mxMalloc
mxCreateNumericArray mxRealloc
mxCreateNumericMatrix mxSetCell
mxCreateSparse mxSetDimensions
mxCreateSparseLogicalMatrix mxSetField
mxCreateStructArray mxSetFieldByNumber
mxCreateStructMatrix mxSetIr
mxGetCell mxSetJc
mxGetDimensions mxSetM
mxGetElementSize mxSetN
mxGetField mxSetNzmax
mxGetFieldByNumber mxSetProperty
mxGetIr

例子

这个例子中,arraySize.c草根走读生/ /墨西哥人例子,表示内存需求大MX阵列要查看示例,请打开arraySize.c在MATLAB编辑器中。

这个函数需要一个正标量数值输入,它使用这个输入来创建方阵。它会检查输入的大小,以确保系统理论上可以创建这个大小的矩阵。如果输入有效,则显示MX阵列在千字节。

构建这个MEX文件。

墨西哥arraySize.c

运行MEX文件。

arraySize (2 ^ 10)
尺寸:1024 x 1024数组大小(单位为千字节):1024

如果你的系统没有足够的内存来创建数组,MATLAB会显示一个内存不足错误

您可以使用此函数进行试验,以测试系统上处理大型数组的性能和限制。

使用负值的注意事项

当使用64位API时,mwSizemwIndex相当于size_t在C / c++。这种类型是无符号的,不像int,这是32位API中使用的类型。注意不要将任何负数传递给函数mwSizemwIndex参数。不要投底片intmwSizemwIndex;无法预测返回值。相反,更改代码以避免使用负值。

构建跨平台的应用程序

如果您开发的程序可以在32位和64位体系结构上运行,请注意mwSizemwIndex.32位的应用程序读取这些值并将它们赋给声明为int在C / c++。注意避免分配一个大的mwSizemwIndex一个价值int或者其他可能太小的变量。

另请参阅

||