Различия:
Интерфейс C, описанный во второй ссылке , намного, намного старше (я использовал этот интерфейс очень давнов 1998 году).С помощью этого интерфейса вы можете создать MEX-файл и запустить его на большом наборе различных версий MATLAB.Вы можете использовать его как из C, так и из кода C ++.
Интерфейс только для C ++, описанный в первой ссылке , является новым в MATLAB R2018a (классы C ++ дляманипуляции с массивами MATLAB были введены в R2017b, но возможность записи MEX-файла была новой в R2018a).MEX-файлы, которые вы пишете с помощью этого интерфейса, не будут работать в предыдущих версиях MATLAB.
Кроме того, этот интерфейс (наконец-то!) Позволяет создавать копии общих данных, операции на месте и т. Д.просили много лет, но они не хотели вставлять старый интерфейс C, потому что боялись, что это будет слишком сложно для обычного писателя MEX-файла).
Еще одно изменение, о котором следует знать:
В R2018a MATLAB также изменил способ хранения сложных массивов в памяти.В более старых версиях MATLAB реальные и мнимые компоненты хранятся в отдельных блоках памяти.В R2018a и далее они хранятся в том же блоке памяти, что и вы, вероятно, используете в своем собственном коде.
Это влияет на MEX-файлы !Если ваш MEX-файл использует сложные данные, он должен читать и записывать их так, как MATLAB хранит их.Если вы запустите MEX-файл, скомпилированный для более старой версии MATLAB, или скомпилируете MEX-файл, используя текущие параметры сборки по умолчанию в R2018a, сложный массив будет скопирован в старую модель хранения перед передачей в MEX-файл.Новый параметр компиляции для команды mex
, -R2018a
, создает MEX-файлы, которые передают данные в новой модели хранения без изменений.Но эти MEX-файлы не будут совместимы с предыдущими версиями MATLAB.
Как выбрать?
Если вам нужны ваши MEX-файлыдля запуска на версиях MATLAB до новейшего R2018a, используйте старый интерфейс C, у вас нет выбора.
Если вы хотите программировать на C, используйте старый Cинтерфейс.
Если вам нужно использовать сложные данные, а не хотите нести расходы на копию , вам нужно ориентироваться на R2018a и новее, иR2017b и старше, отдельно.Вам нужно написать отдельный код для этих двух «платформ».Более старые версии могут быть предназначены только для интерфейса C.Для более новых версий вы можете использовать любой интерфейс.
Если вы цените преимущества современного C ++ и хотели бы воспользоваться ими и ориентированы только на последнюю и лучшую версию MATLAB,затем используйте новый интерфейс C ++.Я еще не пробовал это, но из документации это выглядит очень хорошо разработанным.