mxArrays в файлах C MEXДвоичные MEX-файлы, созданные на 64-разрядных платформах, могут обрабатывать 64-разрядные mxArrayс. Эти большие массивы данных могут иметь до 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/mexmxArrays. Чтобы увидеть пример, откройте 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 или другой переменной, которая может быть слишком маленькой.