В настоящее время я работаю над портированием некоторых MEX-файлов C для 32-разрядного Matlab на 64-разрядный Matlab.
При этом я столкнулся с двумя типами: одним из которых является разработчик Matlab, а другим который является стандартом C.
Это то, что документация Matlab говорит о mwSize
:
mwSize
(C и Fortran)Тип для значений размера
Описание
mwSize
- это тип, представляющий значения размера, например размеры массива. Используйте эту функцию для кросс-платформенной гибкости. По умолчаниюmwSize
эквивалентноint
в C. При использовании переключателяmex -largeArrayDims
mwSize
эквивалентноsize_t
в C. В ФортранеmwSize
аналогичным образом эквивалентенINTEGER * 4
илиINTEGER * 8
, в зависимости от платформы и флагов компиляции.
] Это то, что Википедия говорит о size_t
:
size_t
- это тип данных без знака, определенный несколькими стандартами C / C ++ (например, стандартом C99 ISO / IEC 9899), который определен вstddef.h
. [1] Его можно дополнительно импортировать, включивstdlib.h
, поскольку этот файл внутренне включаетstddef.h
[2].Этот тип используется для представления размера объекта. Библиотечные функции, которые принимают или возвращают размеры, ожидают, что они принадлежат к этому типу или имеют тип возвращаемого значения
size_t
. Кроме того, наиболее часто используемый оператор компилятораsizeof
должен оценивать значение, совместимое сsize_t
.Фактическим типом
size_t
является платформа. -зависимый; распространенной ошибкой является предположение, чтоsize_t
совпадает сunsigned int
, что может привести к ошибкам программирования [3] [4] при переходе с 32-разрядной архитектуры на 64-разрядную, для пример.
Насколько я понимаю, эти типы фактически одинаковы. У меня следующие вопросы:
mwSize
, но я не уверен. Edit: я должен добавить, что люди Matlab используют оба. Например:
size_t mxGetN(const mxArray *pm);
- это функция, которая получает количество столбцов в mxArray. Однако, когда создается матрица, используется,
mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);
, где вход, очевидно, должен быть mwSize.