Handling Large mxArrays
Binary MEX files built on 64-bit platforms can handle 64-bit
mxArrays. These large data arrays can have up to
248–1 elements. The maximum number of
elements a sparse mxArray can have is
248-2.
Using the following instructions creates platform-independent binary MEX files as well.
Your system configuration can affect the performance of MATLAB®. The 64-bit processor requirement enables you to create the
mxArray and access data in it. However, the system
memory, in particular the size of RAM and virtual memory, determine the
speed at which MATLAB processes the mxArray. The more memory
available, the faster the processing.
The amount of RAM also limits the amount of data you can process at one time in MATLAB. For guidance on memory issues, see Strategies for Efficient Use of Memory.
Using the 64-Bit API
The signatures of the API functions shown in the following table use
the mwSize or mwIndex types to
work with a 64-bit mxArray. The variables you use
in your source code to call these functions must be the correct
type.
Fortran mxArray Functions Using
mwSize/mwIndex
mxCalcSingleSubscript | mxCreateStructMatrix |
mxCalloc | mxGetCell |
| mxGetDimensions |
| mxGetElementSize |
| mxGetField |
| mxGetFieldByNumber |
| mxGetIr |
| mxGetJc |
| mxGetM |
| mxGetN |
| mxGetNumberOfDimensions |
| mxGetNumberOfElements |
| mxGetNzmax |
| mxGetProperty |
| mxGetString |
| mxMalloc |
| mxRealloc |
| mxSetCell |
| mxSetDimensions |
mxCreateCellArray | mxSetField |
mxCreateCellMatrix | mxSetFieldByNumber |
mxCreateCharArray | mxSetIr |
mxCreateCharMatrixFromStrings | mxSetJc |
mxCreateDoubleMatrix | mxSetM |
mxCreateNumericArray | mxSetN |
mxCreateNumericMatrix | mxSetNzmax |
mxCreateSparse | mxSetProperty |
mxCreateStructArray |
Caution Using Negative Values
When using the 64-bit API, mwSize and
mwIndex are equivalent to
INTEGER*8 in Fortran. This type is unsigned, unlike
INTEGER*4, which is the type used in the 32-bit
API. Be careful not to pass any negative values to functions that take
mwSize or mwIndex arguments.
Do not cast negative INTEGER*4 values to
mwSize or mwIndex; the
returned value cannot be predicted. Instead, change your code to avoid using
negative values.
Building Cross-Platform Applications
If you develop cross-platform applications (programs that can run on both
32-bit and 64-bit architectures), pay attention to the upper limit of values
you use for mwSize and mwIndex.
The 32-bit application reads these values and assigns them to variables
declared as INTEGER*4 in Fortran. Be careful to avoid
assigning a large mwSize or
mwIndex value to an INTEGER*4
or other variable that might be too small.