Handling Large mxArray
s
Binary MEX files built on 64-bit platforms can handle 64-bit
mxArray
s. 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.