mxArrays
в файлах MEX на CДвоичные файлы MEX, созданные на 64-разрядных платформах, могут обрабатывать 64-разрядные mxArray
s. Эти большие массивы данных могут иметь до 248-1 элемент. Максимальное количество элементов разреженного mxArray
может иметь значение 248-2.
Использование следующих инструкций также создает независимые от платформы двоичные файлы MEX.
Ваше системное строение может повлиять на эффективность MATLAB®. Требование к 64-разрядному процессору позволяет вам создать mxArray
и доступ к данным в нем. Однако системная память, в частности размер оперативной и виртуальной памяти, определяют скорость, с которой MATLAB обрабатывает mxArray
. Чем больше доступной памяти, тем быстрее обработка.
Объем оперативной памяти также ограничивает объем данных, которые можно обработать за один раз в MATLAB. Для руководства по вопросам памяти смотрите Стратегии эффективного использования памяти.
Сигнатуры функций API, показанных в следующей таблице, используют mwSize
или mwIndex
типы для работы с 64-разрядной mxArray
. Переменные, используемые в исходном коде для вызова этих функций, должны быть правильным типом.
C mxArray
Функции, использующие 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
в
, показывает требования к памяти больших matlabroot
/ extern/examples/mexmxArray
s. Чтобы увидеть пример, откройте arraySize.c
в редакторе MATLAB.
Эта функция требует одного положительного скалярного числового входа, который она использует для создания квадратной матрицы. Он проверяет размер входа, чтобы убедиться, что ваша система теоретически может создать матрицу этого размера. Если вход действителен, он отображает размер mxArray
в килобайтах.
Создайте этот файл MEX.
mex arraySize.c
Запустите файл MEX.
arraySize(2^10)
Dimensions: 1024 x 1024 Size of array in kilobytes: 1024
Если в вашей системе недостаточно памяти для создания массива, MATLAB отображает Out of memory
ошибка.
Можно экспериментировать с этой функцией, чтобы проверить эффективность и пределы обработки больших массивов в вашей системе.
При использовании 64-битного API, mwSize
и mwIndex
эквивалентны size_t
в C/C + +. Этот тип не подписан, в отличие от int
, который является типом, используемым в 32-битном API. Будьте осторожны, чтобы не передать какие-либо отрицательные значения функциям, которые берут mwSize
или mwIndex
аргументы. Не приводите отрицательные int
значений в mwSize
или mwIndex
; возвращенное значение невозможно предсказать. Вместо этого измените код, чтобы избежать использования отрицательных значений.
Если вы разрабатываете программы, которые могут работать как на 32-битной, так и на 64-битных архитектурах, обратите внимание на верхний предел значений для mwSize
и mwIndex
. 32-битное приложение читает эти значения и присваивает их переменным, объявленным как int
в C/C + +. Будьте осторожны, чтобы избежать назначения большогоmwSize
или mwIndex
значение для int
или другой переменной, которая может быть слишком маленькой.